在今天之前,我认为这两个选择器是相同的,我认为它们执行相同的操作,但今天我遇到了它们行为不同的问题。我想知道这些选择器之间有什么区别。演示
$('.test p:first');
$('.test').find('p:first');
find
将为调用它的集合中存在的每个元素执行传递的选择器。所以,看看你的代码:
$('.test p:first')
$('.test p:first')
被执行。这将返回一个p
元素,它是所有元素中的第一个.test
元素。
相对于:
$('.test').find('p:first')
首先$('.test')
被执行。这将返回 3 个.test
元素(基于小提琴中的 html)。然后find
在此集合上调用,并将对这 3 个元素中的每一个执行查找。所以对于每一个 .text
它都会找到第一个p
。结果是 3 个元素。
差异基于返回的元素,
$('.test').find('p:first')
p:first
-所有的回报.test
。这将返回一个列表并过滤列表中的每个元素。
$('.test p:first')
-p:first
从所有p
匹配的所有返回.test
。这将返回列表中的元素和过滤器的单个列表。
我的猜测是$('.test p:first')
选择所有元素中的第p
一个..test
$('.test').find('p:first')
选择每个元素中的p
第一个。.test