2011-05-11 97 views
3

最近我遇到了一個事實,即元素的childNodes屬性返回一個NodeList而不是一個Array。現在我明白了一個NodeList是爲了實時收集元素,但我不明白爲什麼它會排除像indexOf這樣的方法,甚至是推送。爲什麼JavaScript NodeList是不可變的?

任何人都可以解釋爲什麼你可以用NodeList做唯一的事情就是索引它嗎?

+0

indexOf方法很方便,但不能使用任何種類的變異,因爲NodeList可能是來自整個DOM的元素的集合。考慮'getElementsByTagName'返回的P元素的集合,它可能在DOM的各個部分,甚至不是兄弟姐妹 - 在哪裏添加「推」P?有用於修改DOM的DOM方法,NodeLists只是通過名稱,tagName,類等來保持對它們的組的引用的便利方式。 – RobG 2011-05-11 09:26:47

回答

4

因爲這是它指定的方式。 DOM API是與JavaScript分開設計的。事實上,NodeList與JavaScript陣列(length和索引)有一些共同點,那就是......好吧,它實際上可能不是巧合,而是輸入到設計過程中的副產品。請記住,JavaScript不是唯一具有DOM綁定的語言。

您可以使用DOM API容易影響NodeList的內容:

...或者,當然,你最喜歡的JavaScript庫。

0

我的印象是這種情況,所以你必須使用正確的DOM機制來改變DOM結構。

看着它的兼容性問題,它可能是更安全反正使用DOM方法:

http://reference.sitepoint.com/javascript/NodeList

+0

另外,它確保當你有一個nodeList時,你知道它在那個時刻表示DOM的狀態,並且你不必擔心狀態。 – 2011-05-11 09:21:34

相關問題