2014-02-14 74 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

相关问题