Me he encontrado con JavaScript y me encontré childNodesy childrenpropiedades. 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é childNodesy childrenpropiedades. Me pregunto cuál es la diferencia entre ellos. ¿También se prefiere uno al otro?
Comprende que .childrenes una propiedad de un Elemento . 1 Solo los elementos tienen .children, y estos elementos secundarios son todos de tipo Elemento. 2
Sin embargo, .childNodeses propiedad de Node . .childNodespuede 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 .childrenporque 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 .childrenes una colección HTMLC , que solo puede contener elementos.
3. De manera similar, .childNodespuede contener cualquier nodo porque es una NodeList .
4. Or .innerText. Vea las diferencias aquí o aquí .
.childrencon documentos XML : jsfiddle.net/fbwbjvch/1Element.childrensolo devuelve elementos secundarios, mientras queNode.childNodesdevuelve 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
childNodeses más confiable. Por ejemplo, MDC (vinculado anteriormente) señala que IE solochildrenacertó en IE 9.childNodesproporciona menos margen de error por parte de los implementadores del navegador.fuente
.childrenno filtra los nodos de comentarios, pero filtra los nodos de texto..getElementsByTagName('*'). IE puede ser tan molesto a veces ...childrenese soporte IE.Buenas respuestas hasta ahora, solo quiero agregar que puede verificar el tipo de nodo usando
nodeType:yourElement.nodeTypeEsto 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
namedItemmétodo que me permite obtener directamente uno de los elementos secundarios sin recorrer todos los elementos secundarios o evitar su uso,getElementByIdetc.p.ej
Iré con Node.childNodes :
Como proporciona
forEachmétodo cuando trabajo con,window.IntersectionObserverpor ejemplo,fuente