关于jquery选择器如何遍历dom的一些问题

Jaz*_*Man 7 javascript jquery jquery-selectors

我怎么知道遍历DOM的是什么以及什么不是?

$('div p')
Run Code Online (Sandbox Code Playgroud)

看起来这会返回所有div元素,然后另一次扫描第一个div搜索中返回的每个dom元素上的P元素.

$('div .foo')
Run Code Online (Sandbox Code Playgroud)

班级似乎没有扫描dom.它们只过滤包含类foo的元素的前一个列表$('div').如果$('div')的子节点具有类foo,则不会选中它.

$('div, div')
Run Code Online (Sandbox Code Playgroud)

不包含欺骗.所以它似乎只扫描了一个lambdas列表,无论是比较还是不比较.但是当你有像:contains('x')这样的过滤器时,这真的让人感到困惑,看起来他们可以自己解决dom.

那么这些选择器如何工作?'div .foo'是否首先遍历div,然后对包含foo的类进行过滤,或者以某种方式将其转换为计算时指示tag == Div && class == foo.什么时候有多个选择器?它们按照它们出现在页面上的顺序显示而没有欺骗让我觉得它只扫描了一次dom.也许它只是在返回之前进行排序和删除欺骗?

Ric*_*lly 2

jQuery 根据最快的选择器来优化它的选择器。如果有本机浏览器支持的方法来获取元素(getElementById 等),它将使用它,否则它将根据本机支持的方法的结果进行过滤。