2011-10-28 52 views

回答

212

.childrenElement的財產。只有元素有孩子,而這些孩子都是元素類型。

但是.childNodesNode的財產。 .childNodes可以包含任何節點。

所以一個具體的例子是

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

當然.children的是DOM4所以瀏覽器的支持是不穩定的,但是如果你使用DOM-shim,您的跨瀏覽器的問題就會迎刃而解!

大多數時候你想使用.children,因爲通常你不想在你的DOM操作中循環TextNodes或Comments。

如果您確實想操作TextNodes,您可能需要.textContent

+3

是的,IE似乎有一些問題:http://www.quirksmode.org/dom/w3c_core.html#t71 –

+1

孩子可以是任何類型的,不只是HTML元素 – david

+1

@david是什麼? 「僅匹配元素的孩子」。子女只能是元素 – Raynos

16

Element.children僅返回元素子元素,而Node.childNodes返回所有節點子元素。請注意,元素是節點,因此元素上都可用。

我相信childNodes更可靠。例如,MDC(鏈接上面)指出IE只在IE 9中獲得childrenchildNodes爲瀏覽器實現者提供了更少的錯誤空間。

+1

Darn,if只有這樣才能在IE 6-8上運行,這將是夢想成真。 – Ryan

+2

@minitech它確實有效(對於某些工作價值)。顯然'.children'不會過濾評論節點,但會過濾掉文本節點。 – Raynos

+1

@Raynos:與'.getElementsByTagName('*')'完全相同。 IE有時候會很煩人... – Ryan

相關問題