第一个(' a')和find(' a:eq(0)')之间的差异

时间:2014-03-28 02:28:43

标签: jquery

在我的例子中,有人可以详细说明第一个('a')和find('a:eq(0)')之间的确切区别:为什么find('a:eq(0)')有效但首先('a')没有!

JSFIDDLE

    $(this).closest('.menu-item').first('a').addClass('active'); 
    $(this).closest('.menu-item').find('a:eq(0)').addClass('active');

由于

4 个答案:

答案 0 :(得分:3)

来自.first() docs

  

给定一个表示一组DOM元素的jQuery对象,.first()方法从该集合中的第一个元素构造一个新的jQuery对象。

所以.first()不接受任何参数,它只选择你的选择器中的第一个匹配元素。你需要使用:

$(this).closest('.menu-item').find('a').first().addClass('active'); 

答案 1 :(得分:3)

由于.first()不带参数,因此您的jQuery无效。

这些是等价的:

$(this).closest('.menu-item').find('a').first().addClass('active'); 
$(this).closest('.menu-item').find('a:eq(0)').addClass('active');

<强> jsFiddle example

答案 2 :(得分:0)

first不接受任何参数,它是jQuery函数,它在一组匹配的元素中工作,这就是它不起作用的原因。而:eq(n)是一个css伪类。这是主要的区别

答案 3 :(得分:0)

根据第一个(here)的jQuery文档,首先将匹配元素的集合减少到集合中的第一个。,并且一个大注释,它不需要选择器即第一个(&#39; a&#39;)无效。在您的上下文中考虑它会将.menu-item的集合减少到第一个,而不是找到第一个a标记,但最接近的只找到一个,因此您的最接近的第一行代码是做同样的事情