2011-10-28 23 views

risposta

212

.children è una proprietà di Element. Solo gli elementi hanno figli, e questi bambini sono tutti di tipo Elemento.

Tuttavia .childNodes è una proprietà di Node. .childNodes può contenere qualsiasi nodo.

Quindi un esempio concreto sarebbe

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

Naturalmente .children è DOM4 così il supporto del browser è traballante, se si utilizza il DOM-shim, i vostri problemi cross browser andrà via!

La maggior parte delle volte si desidera utilizzare .children perché in genere non si desidera eseguire il loop su TextNode o Commenti nella manipolazione DOM.

Se si desidera modificare i TextNode, è preferibile che sia lo .textContent.

+3

Sì, IE sembra avere alcuni problemi: http://www.quirksmode.org/dom/w3c_core.html#t71 –

+1

I bambini possono essere di qualsiasi tipo, non solo elementi HTML – david

+1

@david cosa? "corrispondenti solo ai bambini degli elementi". i bambini possono essere solo elementi – Raynos

16

Element.children restituisce solo elementi figli, mentre Node.childNodes restituisce tutti i nodi figli. Nota che gli elementi sono nodi, quindi entrambi sono disponibili sugli elementi.

Credo che childNodes sia più affidabile. Ad esempio, MDC (collegato sopra) nota che IE ha ottenuto solo children proprio in IE 9. childNodes offre meno spazio per errori da parte degli implementatori del browser.

+1

Darn, se solo questo ha funzionato su IE 6-8, sarebbe un sogno diventato realtà. – Ryan

+2

@minitech funziona (per un certo valore di lavoro). Apparentemente '.children' non filtra i nodi dei commenti, ma filtra i nodi di testo. – Raynos

+1

@Raynos: esattamente - lo stesso con '.getElementsByTagName ('*')'. IE può essere così fastidioso a volte ... – Ryan

Problemi correlati