Я нашел себя , используя JavaScript и я натыкался childNodes
и children
свойства. Мне интересно, в чем разница между ними. Также один предпочтительнее другого?
источник
Я нашел себя , используя JavaScript и я натыкался childNodes
и children
свойства. Мне интересно, в чем разница между ними. Также один предпочтительнее другого?
Поймите, что .children
это свойство элемента . 1 Только элементы имеют .children
, и все эти потомки имеют тип элемента. 2
Тем не менее, .childNodes
является собственностью узла . .childNodes
может содержать любой узел. 3
Конкретный пример будет:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
Большую часть времени вы хотите использовать, .children
потому что обычно вы не хотите зацикливаться на узлах Text или Comment при манипуляциях с DOM.
Если вы хотите манипулировать текстовыми узлами, вы, вероятно, хотите .textContent
вместо этого. 4
1. Технически, это атрибут ParentNode , миксина , включенного в Element.
2. Все они являются элементами, потому что .children
это HTMLCollection , которая может содержать только элементы.
3. Аналогично, .childNodes
может содержать любой узел, потому что это NodeList .
4. Или .innerText
. Смотрите различия здесь или здесь .
.children
XML-документы : jsfiddle.net/fbwbjvch/1Element.children
возвращает только дочерние элементы , аNode.childNodes
возвращает все дочерние узлы . Обратите внимание, что элементы являются узлами, поэтому оба элемента доступны для элементов.Я считаю
childNodes
более надежным. Например, MDC (ссылка выше) отмечает, что IE получилchildren
права только в IE 9.childNodes
Предоставляет меньше возможностей для ошибок разработчикам браузеров.источник
.children
, не отфильтровывает узлы комментариев, но отфильтровывает текстовые узлы..getElementsByTagName('*')
. IE может иногда быть таким раздражающим ...children
которые поддерживают IE.Хорошие ответы до сих пор, я хочу только добавить, что вы можете проверить тип узла, используя
nodeType
:yourElement.nodeType
Это даст вам целое число: (взято отсюда )
Обратите внимание, что в соответствии с Mozilla :
источник
Выберите один зависит от метода, который вы ищете !?
Я пойду с ParentNode.children :
Так как он предоставляет
namedItem
метод, который позволяет мне напрямую получить один из дочерних элементов, не просматривая все дочерние элементы или избегая использованияgetElementById
и т. Д.например
Я пойду с Node.childNodes :
Как это обеспечивает
forEach
метод, когда я работаю с,window.IntersectionObserver
например,источник