Sizzle和/或querySelectorAll - 嵌套元素的枚举顺序?

时间:2012-10-12 14:40:21

标签: jquery dom jquery-selectors sizzle selectors-api

如果我有一组嵌套的DOM元素,例如ul > li > ul > li并且我自己使用选择器li,执行Sizzle或document.querySelectorAll定义元素的返回顺序?

可能返回的订单包括“最顶层的第一个”,“叶子节点优先”或“仅按文档顺序”,但我从未见过任何记下来指定哪个。

1 个答案:

答案 0 :(得分:8)

嗯,在MDN documentation document.querySelectorAll明确说明<div class="a"> <div class="a-a"> <div class="a-a-a"></div> <div class="a-a-b"></div> </div> <div class="a-b"> <div class="a-b-a"></div> <div class="a-b-b"></div> </div> </div> <div class="b"> <div class="b-a"> <div class="b-a-a"></div> <div class="b-a-b"></div> </div> <div class="b-b"> <div class="b-b-a"></div> <div class="b-b-b"></div> </div> </div>

  

返回文档中的元素列表(使用depth-first   与指定匹配的文档节点的预订遍历)   选择者组。

W3 DOM documentation给出相同的描述:

  

Document,DocumentFragment和上的querySelectorAll()方法   元素接口必须返回包含所有内容的NodeList   匹配上下文节点的子树内的元素节点   文件订单。 [...]术语“文档顺序”是指 对DOM树或相关子树进行深度优先预先遍历遍历。

换句话说,给定以下结构:

document.querySelectorAll('div')

... ["a", "a-a", "a-a-a", "a-a-b", "a-b", "a-b-a", "a-b-b", "b", "b-a", "b-a-a", "b-a-b", "b-b", "b-b-a", "b-b-b"] 的结果应该是完全符合以下顺序的NodeList:

{{1}}