Me he encontrado con JavaScript y me encontré childNodes
y children
propiedades. Me pregunto cuál es la diferencia entre ellos. ¿También se prefiere uno al otro?
fuente
Me he encontrado con JavaScript y me encontré childNodes
y children
propiedades. Me pregunto cuál es la diferencia entre ellos. ¿También se prefiere uno al otro?
Comprende que .children
es una propiedad de un Elemento . 1 Solo los elementos tienen .children
, y estos elementos secundarios son todos de tipo Elemento. 2
Sin embargo, .childNodes
es propiedad de Node . .childNodes
puede contener cualquier nodo 3
Un ejemplo concreto sería:
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 mayoría de las veces, desea usarlo .children
porque generalmente no desea recorrer los nodos de Texto o Comentario en su manipulación DOM.
Si desea manipular nodos de texto, probablemente lo desee .textContent
. 4 4
1. Técnicamente, es un atributo de ParentNode , un mixin incluido por Element.
2. Todos son elementos porque .children
es una colección HTMLC , que solo puede contener elementos.
3. De manera similar, .childNodes
puede contener cualquier nodo porque es una NodeList .
4. Or .innerText
. Vea las diferencias aquí o aquí .
.children
con documentos XML : jsfiddle.net/fbwbjvch/1Element.children
solo devuelve elementos secundarios, mientras queNode.childNodes
devuelve todos los elementos secundarios del nodo . Tenga en cuenta que los elementos son nodos, por lo que ambos están disponibles en los elementos.Creo que
childNodes
es más confiable. Por ejemplo, MDC (vinculado anteriormente) señala que IE solochildren
acertó en IE 9.childNodes
proporciona menos margen de error por parte de los implementadores del navegador.fuente
.children
no filtra los nodos de comentarios, pero filtra los nodos de texto..getElementsByTagName('*')
. IE puede ser tan molesto a veces ...children
ese soporte IE.Buenas respuestas hasta ahora, solo quiero agregar que puede verificar el tipo de nodo usando
nodeType
:yourElement.nodeType
Esto le dará un número entero: (tomado de aquí )
Tenga en cuenta que según Mozilla :
fuente
¡Elegir uno depende del método que estés buscando !?
Iré con ParentNode.children :
Como proporciona un
namedItem
método que me permite obtener directamente uno de los elementos secundarios sin recorrer todos los elementos secundarios o evitar su uso,getElementById
etc.p.ej
Iré con Node.childNodes :
Como proporciona
forEach
método cuando trabajo con,window.IntersectionObserver
por ejemplo,fuente