我想知道这个话题很长一段时间。有问题的方法如下:
getElementsByTagName
getElementsByClassName
getElementsByName
querySelectorAll
据我所知,这些 DOM 方法是唯一能够返回 freeze 或 live 的方法NodeLists
。对于其中一些方法,顺序由W3C 规范定义。例如,http://www.w3.orgNodeLists
为返回的内容编写了以下内容querySelectorAll
Document、DocumentFragment 和 Element 接口上的 querySelectorAll() 方法必须返回一个 NodeList,其中包含上下文节点的子树中所有匹配的 Element 节点,按文档顺序排列。如果没有匹配的节点,该方法必须返回一个空的 NodeList。
但是,对于我提到的其他方法,我找不到类似的明确规范。我的问题是:
- 结果是否有定义的顺序(很可能是文档顺序)?
- 这些规范有多可靠和跨浏览器实现?
绝对清楚:
<div>this</div>
<div>is</div>
<div>a demo</div>
// is this always guaranteed to be "<div>is</div>"
document.querySelectorAll('div')[1]