Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2012, 16:44
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Получить список ВСЕХ элементов DOM
Столкнулся со следующим: попытался получить список всех элементов дерева DOM, но столкнулся с тем, что получается список не всех элементов, а только лишь обычных тегов.

Как известно сейчас document.all не поддерживается и приходится использовать getElementsByTagName('*'). Но он возвращает только обычные тэги (с nodeType==1). То есть ни текстовые ноды, ни комментарии, ни другие ноды дерева DOM с другим nodeType в полученном списке недоступны...

Вопрос: есть ли способ попроще получить полный список элементов дерева DOM?
Ответить с цитированием
  #2 (permalink)  
Старый 02.01.2012, 21:33
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Введение. DOM в примерах.
Интерактивное путешествие по DOM
Поиск элементов в DOM
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 02.01.2012, 23:19
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Я не понял при чем тут все это - там нет ответа на мой вопрос. То, что можно обойти всё дерево по firstChild + nextSibling и так понятно.
Есть ли простой способ найти все элементы дерева, включая комментарии и текстовые ноды? Какая-нибудь замена .all или getElementsByTagName ?
Ответить с цитированием
  #4 (permalink)  
Старый 02.01.2012, 23:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

А вам зачем?
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 02.01.2012, 23:34
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

А почему Вы спрашиваете?
Ответить с цитированием
  #6 (permalink)  
Старый 02.01.2012, 23:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

тока так:
<html>
  <head>
  </head>
  <body>
  leftTextNode<div>text node</div>rightTextNode
<script>
(function(){
    var els = document.getElementsByTagName('*'),
        all = [];
    for(var i = 0; els[ i ]; i++ ) {
        if ( els[ i ].previousSibling && els[ i ].previousSibling.nodeType !== 1 ) {
            all.push( els[ i ].previousSibling );
        }
        all.push( els[i] );
        if ( els[ i ].firstChild && els[ i ].firstChild.nodeType !== 1 && els[ i ].childNodes.length === 1 ) {
            all.push( els[ i ].firstChild );
        }
    }
    alert(all.length);
}());
</script>
  </body>
</html>

Так у них и сортировка правильная, можно конечно сделать и проще, но не будет гарантии верной сортировки.
Ответить с цитированием
  #7 (permalink)  
Старый 16.04.2012, 00:49
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Maxmaxmахimus
ну вы и слупки
внимательно прочитай тему, и пойми что твой ответ как минимум не имеет отношения к заданному вопросу.
Так что тот еще вопрос, кто слоупочит.
Кстати, почему ты заместо слоупок пишешь слупок?
Ответить с цитированием
  #8 (permalink)  
Старый 16.04.2012, 11:33
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от Почемучкин
получить полный список элементов дерева DOM?
можно рекурсивный вызов использовать, в интернете много разных реализаций

ниже один из вариантов
<!DOCTYPE html>
<html>
  <head>
    <script>
      function getAllEls() { 
        var arrAll = [];
        
        function getEls(el) {
          var chNodes,
              i;
          arrAll.push(el);
          if (el.hasChildNodes()) {
            chNodes = el.childNodes;
            for (i = 0; i < chNodes.length; i++) {
              getEls(chNodes[i]); // вызываем рекурсивно
            }
          }
        }
        
        getEls(document);
        alert(arrAll.join('\n'));
      }
    </script>
  </head>
  <body onload="getAllEls()">
    leftTextNode<div>text node</div>rightTextNode
  </body>
</html>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
Получить список всех css-свойств и их возможных значений, поддерживаемые браузером Denisko-Redisko Общие вопросы Javascript 7 03.01.2012 03:33
Получить список родительских элементов exec Общие вопросы Javascript 3 20.06.2010 11:00
Как получить список всех установленных плагинов VitAngel Internet Explorer 0 15.07.2009 09:13
Получить список всех доступных методов Bseagate Общие вопросы Javascript 3 17.11.2008 13:38