如何让jQuery的$ .each()函数根据条件跳过某些对象?

时间:2011-10-25 12:31:00

标签: javascript jquery html

说我有以下HTML:

<p class="link"><a href="#">This is a link.</a></p>
<p class="link"><a href="#">This is another link.</a></p>
<p class="link current"><a href="#">This is yet another link.</a></p>
<p class="link"><a href="#">This is still another link.</a></p>

我想使用jQuery的$.each()函数来遍历类link的所有对象,但我想跳过也有类current的对象。我该怎么做?

我可以像这样检查每个循环中是否存在类:

$('.link').each(function() {
    if (!$(this).hasClass('current'))
        $(this).fadeOut();
})

...但有没有办法在jQuery中指定“class x,而不是class y”,不需要if条件?

4 个答案:

答案 0 :(得分:13)

使用:not() selector排除元素:

$('.link:not(.current)').fadeOut();

答案 1 :(得分:3)

你可以filter你的初始jQuery对象:

$('.link').filter(function() {
    return !$(this).hasClass('current');
}).fadeOut();

答案 2 :(得分:1)

$('.link').each(function() {
    if ($(this).attr('class')!="link current")
        $(this).fadeOut();
})

答案 3 :(得分:0)

正如Guffa建议的那样,你可以使用:not() CSS伪选择器。要将其用于.each()函数,您可以执行以下操作(请参阅this jsfiddle作为证据):

jQuery(".link:not(.current)").each(function(index, element){
    jQuery(element).fadeOut();
});

它是否符合您的需求?