jquery中选择器之间的区别

jquery中选择器之间的区别,jquery,Jquery,在今天之前,我认为这两个选择器是相同的,我认为它们执行相同的操作,但今天我遇到了一个问题,即它们的行为不同。我想知道这些选择器之间有什么区别 差异基于返回的元素 $('.test').find('p:first')-返回所有上的p:first。test。这将返回一个列表,并对列表中的每个元素进行筛选 $('.test p:first')-从所有中匹配的p返回p:first。这将从列表中返回元素和筛选器的单个列表 我的猜测是,$('.test p:first')使用.test选择所有元素中的第一个

在今天之前,我认为这两个选择器是相同的,我认为它们执行相同的操作,但今天我遇到了一个问题,即它们的行为不同。我想知道这些选择器之间有什么区别


差异基于返回的元素

$('.test').find('p:first')
-返回所有
上的
p:first
。test
。这将返回一个列表,并对列表中的每个元素进行筛选

$('.test p:first')
-从所有
中匹配的
p
返回
p:first
。这将从列表中返回元素和筛选器的单个列表

我的猜测是,
$('.test p:first')
使用
.test
选择所有元素中的第一个
p


$('.test').find('p:first')
首先选择
p
中的每个
元素,并使用
。test
find
将为其调用的集合中存在的每个元素执行传递的选择器。那么,看看您的代码:

$('.test p:first')
执行
$('.test p:first')
。这将返回一个
p
元素,它是所有
元素中的第一个元素。test
元素

与之相反:

$('.test').find('p:first')

首先执行
$('.test')
。这将返回3个
.test
元素(基于小提琴中的html)。然后在此集合上调用
find
,并对这3个元素中的每个元素执行查找。因此,对于每个
.text
它将找到第一个
p
。结果是3个元素。

是的,我也理解这一点。读到
$('.test')的整个集合中找到第一个p
…将仅是其中之一如果你要问一个问题并提供一个JSFIDLE示例,尝试在这两个集合中问相同的问题,是吗?@lonesomeday我最初也被小提琴中不同的代码所抛弃,但总的来说这是同一个问题。第一个返回1个元素,第二个返回(可能)多个元素。如果没有类似于
:first
:last
的内容,这两种结构将是等效的。问题很简单,为什么这里不是这样。@JamesMontagne它至少有潜在的误导性,当然没有帮助。在我看来,当你征求建议时,这是一种不好的做法。@lonesomeday
$('.test')。find('p:first')
返回3个元素,而
$('.test p:first')
返回1。对不起,我错了。对不起,我现在不能收回我的否决票。@charlietfl我的猜测并不意味着我做了一个疯狂的猜测。@charlietfl所有匹配元素的第一个
p
。正如我发布的.no.“$('.test')包含3个元素…,那么添加的pslector将是其中的9个元素,在这9个元素中,只有一个是第一个元素
$('.test').find('p:first')