Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   массив из верхних узлов документа (https://javascript.ru/forum/events/52324-massiv-iz-verkhnikh-uzlov-dokumenta.html)

милт 14.12.2014 00:01

массив из верхних узлов документа
 
Подскажите как создать массив из всех самых верхних узлов документа, то есть из тех узлов у которых нет childNodes. Нужно чтобы в массиве присутствовали ELEMENT_NODE и TEXT_NODE. Может быть в js или jquery есть какие-то подходящие стандартные функции?

Aetae 14.12.2014 00:06

https://developer.mozilla.org/en-US/...API/TreeWalker

рони 14.12.2014 03:10

милт,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  *  {
     border:  #3333FF solid 1px;
     padding: 5px;

  }
  </style>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function(){
       $( ':not(:has(>))' ).css('background', 'rgb(102, 255, 102)');
});
  </script>
</head>

<body>

<div>
    <a>Нажимаем</a>
</div>
<ul>
    <li>1</li>
</ul>
</body>

</html>

рони 31.12.2014 15:48

милт, если нужны пустые TEXT_NODE убрать && el.data.replace(/\s/g,'')
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.onload =
     function(){

        var arrAll = [];
        function getEls(el) {
          var chNodes,
              i;
         if(el.childNodes.length == 0 && el.nodeType == 1||  el.nodeType == 3  && el.data.replace(/\s/g,'')) arrAll.push(el);
          else {
            chNodes = el.childNodes;
            for (i = 0; i < chNodes.length; i++) {
              getEls(chNodes[i]); // вызываем рекурсивно
            }
          }
        }

       getEls(document.body);
       alert(arrAll.length)
};
  </script>
</head>

<body>

<div>
    <a></a>  <!-- 1 -->
</div>
<ul>
    <li>1</li>    <!-- 2 -->
</ul>
</body>

</html>


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