在我的例子中,有人可以详细说明第一个('a')和find('a:eq(0)')之间的确切区别:为什么find('a:eq(0)')有效但首先('a')没有!
$(this).closest('.menu-item').first('a').addClass('active');
$(this).closest('.menu-item').find('a:eq(0)').addClass('active');
由于
答案 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
标记,但最接近的只找到一个,因此您的最接近的第一行代码是做同样的事情