选择以前的锚标记并使用jQuery向其添加类

时间:2011-12-04 12:09:21

标签: javascript jquery parent children css-selectors

基本上我有两个由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个:子选择器非常昂贵,所以我想知道是否有更简单的方法来选择前一个锚节点,(而忽略第二个)。

3 个答案:

答案 0 :(得分:3)

你可以这样做

$(this).parent().children('a:eq(0)').addClass('new');

Learn more about :eq()

或者,如果<a><div>之间没有元素,则可以

$(this).prev('a');

Learn more about .prev()

答案 1 :(得分:2)

我可能会将prevAllfirst(或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方法为您提供了很多方法来到达任何目的地。