2014-02-14 110 views

回答

2

NodeList實際上並不是真正的香草JavaScript構造,它是DOM API的一部分。類似於ecma規範不會包含諸如[HtmlElement]之類的類型,它也不會提及NodeList。

從哪裏可以找到它在World Wide Web Consortium (W3C)的DOM api文檔。

public interface NodeList

NodeList接口提供對節點的有序集合的抽象,沒有定義或約束如何實現此集合。 DOM中的NodeList對象是活動的。

你不能(據我所知)創建一個NodeList。您可以訪問一個,但不能創建一個供您自己使用。在這方面,這就是爲什麼在javascript中使用數組的原因。

NodeLists將是訪問DOM中「活動」節點列表的結果。這意味着列表將在您更改時更新,或者在沒有任何額外檢測的情況下自動更改。

1

參見:http://www.w3schools.com/dom/dom_nodelist.asp優勢NodeList

節點列表會保持自身的更新。如果元素被刪除或添加,則在節點列表或XML文檔中,列表會自動更新。

其中節點的Array沒有。

更多信息:http://toddmotto.com/a-comprehensive-dive-into-nodelists-arrays-converting-nodelists-and-understanding-the-dom/

作者建議不要使用NodeLists,我不這樣做。然而,這是一個很好的閱讀,因爲他的自以爲是的方法和代碼示例應該可以輕鬆掌握ArrayNodeList之間的差異。

2

只有當DOM返回一個節點列表時,才使用NodeList。爲什麼DOM不返回一個數組或者至少有一個在其原型鏈中具有數組的類型?因爲DOM被設計成不依賴於任何特定語言。 DOM API返回的所有類型將是主機類型而不是本機類型。這允許DOM是語言不可知的,並且不依賴於任何特定的語言結構。

當然,您可以通過調用或應用在NodeList上使用Array方法。例如。

Array.prototype.map.call(nodeList, function (a, index) { ... }); 

的「活」的NodeLists另一個有趣的屬性是結合保持節點列表並返回它是API調用之間的數據。這種數據綁定會導致NodeList自動更新,以響應DOM操作,從而影響通話返回的節點。

+0

對於'document.querySelectorAll',是否是一個非活動的NodeList返回純粹是因爲它也是獨立的,還是有其他好處,有一個NodeList? – Robert

+1

在返回非生命節點列表的情況下(我認爲querySelectorAll是唯一的情況),除了API一致性和語言特定結構的解耦之外,NodeList over Array沒有任何好處。 – huwiler

相關問題