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

Javascript 关于jquery选择器如何遍历dom的一些问题,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我如何知道什么遍历DOM,什么不遍历DOM $('div p') 看起来这会返回所有的div元素,然后在第一次div搜索中返回的每个dom元素上再次扫描p元素 $('div .foo') 类似乎没有扫描dom。它们只过滤前面的列表$('div')中包含类foo的元素。如果$('div')的子项具有类foo,则不会选择它 $('div, div') 不包含重复项。因此,它似乎只扫描了一次lambda列表,这些lambda要么比较,要么不比较。但是,当您使用诸如:contains('x')之类

我如何知道什么遍历DOM,什么不遍历DOM

$('div p')
看起来这会返回所有的div元素,然后在第一次div搜索中返回的每个dom元素上再次扫描p元素

$('div .foo')
类似乎没有扫描dom。它们只过滤前面的列表$('div')中包含类foo的元素。如果$('div')的子项具有类foo,则不会选择它

$('div, div')
不包含重复项。因此,它似乎只扫描了一次lambda列表,这些lambda要么比较,要么不比较。但是,当您使用诸如:contains('x')之类的过滤器时,这会变得非常混乱,这些过滤器似乎可以自行递归dom


那么这些选择器是如何工作的呢?“div.foo”是否首先只遍历div,然后对包含foo的类进行筛选,或者它是否以某种方式转化为一个计算,即当tag==div&&class==foo时。如果有多个选择器呢?它们在页面上的显示顺序没有重复,这让我感觉它只扫描了dom一次。也许它只是在返回之前对重复项进行排序和删除?

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

从技术上讲,
$(div.foo)
所做的是查找所有
.foo
元素,然后过滤那些
div
。就唯一的结果而言-看看。@mblase75否!!它检查DIV元素中的所有类foo!它实际上是抛出一个语法错误:)@pimvdb好吧,万事通先生,所以我忘了我的引号了。:-)