Javascript - дочерний node счет - программирование
Подтвердить что ты не робот

Javascript - дочерний node счет

<ul>
    <li>Array1</li>
    <li>Array2</li>
    <li id="element">Array3</li>
</ul>
<script>
   var temp = document.getElementById('element').parentNode;
   child = temp.childNodes;
   console.log(temp.length);
</script>

Мне нужно получить длину дочернего элемента node, используя идентификатор элемента. Мой код возвращает 7 в результате, но у меня есть только 3 узла.

4b9b3361

Ответ 1

То, что вы хотите, это .children.length или .childElementCount (не рекомендуется), поскольку childNodes получает все childNodes, а также текстовые узлы, которые в вашем случае 4 (разрывы строк).

var temp = document.getElementById('element').parentNode;
child = temp.children;
console.log(child.length);
// or the following
console.log(temp.childElementCount);

Ответ 2

childNodes возвращает 3 элемента списка, их текстовое содержимое и пробел между ними (но не во всех браузерах). Три варианта:

  • FF и Chrome: elem.childElementCount (вернется 3)

  • IE (& FF AFAIK): elem.childNodes.length (=== 3)

  • Старый IE: elem.children.length

Ответ 3

Свойство childrenNodes включает все типы узлов: TEXT_NODE, ELEMENT_NODE, COMMEN_NODE и т.д.

Вам нужно подсчитать количество элементов, здесь примерное решение на основе DOM, которое должно работать во всех двигателях:

var temp = document.getElementById('element').parentNode;
var children = temp.childNodes;
console.log(children.length); // 7

function countElements(children) {
  var count=0;
  for (var i=0, m=children.length; i<m; i++) 
     if (children[i].nodeType===document.ELEMENT_NODE) 
         count++;
  return count;
}
console.info(countElements (children));​ // 3

ИЗМЕНИТЬ

Аналогично, если вы хотите, чтобы функция извлекала все дочерние элементы только с помощью DOM, вот функция:

function childElements(node) {
  var elems = new Array();
  var children = node.childNodes;

    for (var i=0,i < children.length ; i++) {
         if (children[i].nodeType===document.ELEMENT_NODE) {
             elems.push(children[i]);
             return elems;
          }
         }
     }

console.info(childElements(temp).length);​ //3