2011-10-28 14 views

Respuesta

212

.children es propiedad de Element. Solo los elementos tienen hijos, y estos hijos son todos de tipo Elemento.

Sin embargo, .childNodes es una propiedad de Node. .childNodes puede contener cualquier nodo.

Así, un ejemplo concreto sería

var el = document.createElement("div"); 
el.textContent = "foo" 
el.childNodes.length === 1; // TextNode is a node child 
el.children.length === 0; // no Element children 

Por supuesto .children es DOM4 lo que el soporte del navegador es inestable, sin embargo, si se utiliza el DOM-shim, sus problemas con el navegador cruz desaparecerán!

La mayor parte del tiempo desea utilizar .children porque generalmente no desea pasar por encima de los TextNodes o los Comentarios en su manipulación de DOM.

Si desea manipular TextNodes, probablemente desee .textContent.

+3

Sí, IE parece tener algunos problemas: http://www.quirksmode.org/dom/w3c_core.html#t71 –

+1

Los niños pueden ser de cualquier tipo, no solo los elementos HTML – david

+1

@david, ¿qué? "haciendo coincidir solo elemento niños". los niños solo pueden ser elementos – Raynos

16

Element.children devuelve solo elemento children, mientras que Node.childNodes devuelve todos los elementos secundarios. 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 solo obtuvo children directamente en IE 9. childNodes proporciona menos espacio para errores por parte de los implementadores del navegador.

+1

Darn, if solo esto funcionó en IE 6-8, sería un sueño hecho realidad. – Ryan

+2

@minitech funciona (por algún valor de trabajo). Aparentemente '.children' no filtra los nodos de comentarios, pero filtra los nodos de texto. – Raynos

+1

@Raynos: Exactamente igual con '.getElementsByTagName ('*')'. IE puede ser tan molesto a veces ... – Ryan

Cuestiones relacionadas