Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получить список ВСЕХ элементов DOM (https://javascript.ru/forum/events/24488-poluchit-spisok-vsekh-ehlementov-dom.html)

Почемучкин 02.01.2012 16:44

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

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

Вопрос: есть ли способ попроще получить полный список элементов дерева DOM?

nerv_ 02.01.2012 21:33

Введение. DOM в примерах.
Интерактивное путешествие по DOM
Поиск элементов в DOM

Почемучкин 02.01.2012 23:19

Я не понял при чем тут все это - там нет ответа на мой вопрос. То, что можно обойти всё дерево по firstChild + nextSibling и так понятно.
Есть ли простой способ найти все элементы дерева, включая комментарии и текстовые ноды? Какая-нибудь замена .all или getElementsByTagName ?

Aetae 02.01.2012 23:21

А вам зачем?

Почемучкин 02.01.2012 23:34

А почему Вы спрашиваете?

devote 02.01.2012 23:52

тока так:
<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>

Так у них и сортировка правильная, можно конечно сделать и проще, но не будет гарантии верной сортировки.

Gvozd 16.04.2012 00:49

Цитата:

Сообщение от Maxmaxmахimus
ну вы и слупки

внимательно прочитай тему, и пойми что твой ответ как минимум не имеет отношения к заданному вопросу.
Так что тот еще вопрос, кто слоупочит.
Кстати, почему ты заместо слоупок пишешь слупок?

Pavel M. 16.04.2012 11:33

Цитата:

Сообщение от Почемучкин
получить полный список элементов дерева 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>


Часовой пояс GMT +3, время: 09:12.