我已阅读该文档,并未完全理解使用NodeList的优势。
因为它就像数组(我知道它不是数组),使用NodeList有什么好处呢?
答案 0 :(得分:2)
NodeList实际上不是一个vanilla javascript构造,因为它是DOM API的一部分。与ecma规范不包含[HtmlElement]等类型的方式类似,它也不会提到NodeList。
您会发现它位于DOM API的World Wide Web Consortium (W3C)文档中。
NodeList接口提供有序节点集合的抽象,而不定义或约束此集合的实现方式。 DOM中的NodeList对象是实时的。
你不能(据我所知)创建一个NodeList。您可以访问一个,但不能创建一个供您自己使用。在这方面,这就是为什么数组在javascript中使用。
NodeLists将成为访问DOM中“实时”节点列表的结果。这意味着列表将在您更改时自动更新,或者在没有任何额外检测的情况下自动更改。
答案 1 :(得分:2)
只有在DOM返回一个NodeList时才使用NodeList。为什么DOM不返回一个Array或至少一个在其原型链中有Array的类型?因为DOM的设计不依赖于任何特定语言。 DOM API返回的所有类型都是主机类型而不是本机类型。这允许DOM与语言无关,并且不依赖于任何特定的语言构造。
当然,您可以通过调用或应用在NodeList上使用Array方法。 E.g。
Array.prototype.map.call(nodeList, function (a, index) { ... });
“实时”NodeLists的另一个有趣属性是NodeList与返回它的API调用之间保持的数据绑定。此数据绑定会导致NodeList自动更新,以响应可能影响调用返回的节点的DOM操作。
答案 2 :(得分:1)
请参阅:http://www.w3schools.com/dom/dom_nodelist.asp
NodeList
的好处:
节点列表使自己保持最新状态。如果删除或添加元素,则在节点列表或XML文档中,列表会自动更新。
Array
个节点没有。
作者建议不要使用NodeLists,我不这样做。然而,这是一个很好的阅读,因为他的见解方法和代码示例应该能够轻松掌握Array
和NodeList
之间的差异。