在查询的NodeLists中“订单”的可靠性如何

时间:2012-10-27 17:38:49

标签: javascript html dom w3c specifications

我很想知道这个话题已经有一段时间了。有问题的方法如下:

  • getElementsByTagName
  • getElementsByClassName
  • getElementsByName
  • querySelectorAll

据我所知,这些DOM方法是唯一能够返回冻结或实时NodeLists的方法。对于其中一些方法,订单由 W3C规范定义。例如,http://www.w3.orgNodeLists

返回的querySelectorAll写下以下内容
  

Document,DocumentFragment和上的querySelectorAll()方法   元素接口必须返回包含所有内容的NodeList   匹配上下文节点的子树内的元素节点   文件订单。如果没有匹配的节点,则该方法必须返回   一个空的NodeList。

但是,我找不到与我提到的其他方法类似的清晰规范。我的问题是:

  • 是否有结果的定义顺序(最可能的文档顺序)
  • 这些规范
  • 的可靠性和跨浏览器实现程度如何?

绝对清楚:

<div>this</div>
<div>is</div>
<div>a demo</div>

// is this always guaranteed to be "<div>is</div>"
document.querySelectorAll('div')[1]

1 个答案:

答案 0 :(得分:4)

是。所有这些都按文档顺序/树顺序排列。

  • getElementsByNameDOM Level-2-HTML)返回NodeList
  • querySelectorAllSelectors API)按文档顺序返回NodeList
  • getElementsByTagNameDOM)返回HTMLCollection
  • getElementsByClassNameDOM)返回HTMLCollection

HTMLCollectionsNodeLists都指定为

  

元素按tree order排序。

当通过indizes访问它们时。

我认为这些规范(即使链接版本可能比某些实现更新)都是由所有浏览器可靠地实现的,主要是因为树顺序是最合乎逻辑且易于编码的。但是,您可能需要注意某些浏览器可能会返回由不同元素组成的列表,因为它们的节点匹配不同。在确定元素的name时,我可以想到一些怪癖。