基本上我有两个由div分隔的锚标签。
<a class="foo"></a>
<div class="count">0</a>
<a class="bar"></a>
我正在做这样的事情:
var addClass = $(this).parent().children('a:first-child').addClass('new');
然后将它添加到第一个锚标记中,如下所示:
<a class="foo new"></a>
我知道使用第n个:子选择器非常昂贵,所以我想知道是否有更简单的方法来选择前一个锚节点,(而忽略第二个)。
答案 0 :(得分:3)
你可以这样做
$(this).parent().children('a:eq(0)').addClass('new');
或者,如果<a>
和<div>
之间没有元素,则可以
$(this).prev('a');
答案 1 :(得分:2)
我可能会将prevAll
与first
(或eq(0)
合并,因为first
只调用eq(0)
- 但我发现first
更多可读):
$(this).prevAll("a").first().addClass("new");
// or
$(this).prevAll("a").eq(0).addClass("new");
prevAll
返回所有元素的前一个兄弟节点,从最近的兄弟节点开始,当然first
/ eq(0)
将集合缩减为第一个元素。
您可能很想将:first
选择器与prevAll
一起使用,以避免构建不必要的兄弟姐妹列表,但to my surprise it works better在事后使用first
答案 2 :(得分:0)
怎么样:
$(this).siblings('a').eq(0).addClass(0);
实际上,如果你的结构和你的例子一样简单,你可以做一个简单的事情:
$(this).prev().addClass(0);
jQuery的traversal方法为您提供了很多方法来到达任何目的地。