Je me suis retrouvé à utiliser JavaScript et j'ai parcouru childNodes
et children
propriétés. Je me demande quelle est la différence entre eux. Est-ce aussi l'un préféré à l'autre?
la source
Je me suis retrouvé à utiliser JavaScript et j'ai parcouru childNodes
et children
propriétés. Je me demande quelle est la différence entre eux. Est-ce aussi l'un préféré à l'autre?
Comprenez que .children
c'est une propriété d'un élément . 1 Seuls les éléments ont .children
, et ces enfants sont tous de type élément. 2
Cependant, .childNodes
est une propriété de Node . .childNodes
peut contenir n'importe quel nœud. 3
Un exemple concret serait:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
La plupart du temps, vous voulez l'utiliser .children
parce que généralement vous ne voulez pas faire de boucle sur les nœuds Texte ou Commentaire dans votre manipulation DOM.
Si vous souhaitez manipuler des nœuds de texte, vous le souhaitez probablement à la .textContent
place. 4
1. Techniquement, c'est un attribut de ParentNode , un mixin inclus par Element.
2. Ce sont tous des éléments car il .children
s'agit d'une HTMLCollection , qui ne peut contenir que des éléments.
3. De même, .childNodes
peut contenir n'importe quel nœud car il s'agit d'une NodeList .
4. Ou .innerText
. Voir les différences ici ou ici .
.children
sur les documents XML : jsfiddle.net/fbwbjvch/1Element.children
renvoie uniquement les enfants des éléments , tandis queNode.childNodes
renvoie tous les enfants des nœuds . Notez que les éléments sont des nœuds, donc les deux sont disponibles sur les éléments.Je pense que
childNodes
c'est plus fiable. Par exemple, MDC (lié ci-dessus) note qu'IE ne fonctionne quechildren
dans IE 9.childNodes
offre moins de marge d'erreur aux implémenteurs de navigateur.la source
.children
il ne filtre pas les nœuds de commentaire, mais il filtre les nœuds de texte..getElementsByTagName('*')
. IE peut être si ennuyeux parfois ...children
qui prennent en charge IE.De bonnes réponses jusqu'à présent, je veux seulement ajouter que vous pouvez vérifier le type d'un nœud en utilisant
nodeType
:yourElement.nodeType
Cela vous donnera un entier: (extrait d' ici )
Notez que selon Mozilla :
la source
Choisissez-en un dépend de la méthode que vous recherchez!?
J'irai avec ParentNode.children :
Comme il fournit une
namedItem
méthode qui me permet d'obtenir directement l'un des éléments enfants sans parcourir tous les enfants ou éviter d'utilisergetElementById
etc.par exemple
J'irai avec Node.childNodes :
Comme il fournit une
forEach
méthode lorsque je travaille avecwindow.IntersectionObserver
par exemplela source