从每个元素的三元组中选择第2和第3个元素

时间:2012-04-09 19:10:19

标签: javascript jquery

我有6个元素的集合,我想按每个第二个和第三个元素进行过滤,所以我想要元素2,3,5和6.我已经尝试了.filter(':nth-child(2n+1)'));但显然过滤了2 ,4和6。

我尝试的另一种方法是删除元素1和4,但是我找不到与过滤器相反的jQuery函数,它会从集合中删除元素。

5 个答案:

答案 0 :(得分:4)

.filter(':not(:nth-child(1),:nth-child(4))')

http://jsbin.com/owosuw/2/edit#source

答案 1 :(得分:3)

按照你的例子,我不认为你真的想要2n和3n。你想要每组3个中的第2个和第3个?然后其中任何一个都应该起作用:

.filter(':nth-child(3n+2), :nth-child(3n+3)'));
.filter(':not(:nth-child(3n+1))');

答案 2 :(得分:2)

您还可以将filter与函数一起使用(它采用单个参数,即匹配元素的从零开始的数字):

$('div').filter( function(n) { return n%3!=0 } )

在这里查看我的JSFiddle概念验证:

http://jsfiddle.net/4c4Re/

答案 3 :(得分:1)

我认为只有一个nth-child你不能这样做。我不知道你想做什么,但是如果你想给它一个风格或类别或事件或那个类别的东西你可以全部给它们并从第1和第4个中删除它:

$('div').addClass('red');

$('div:nth-child(3n+1)').removeClass('red');

实例:http://jsfiddle.net/gnbMH/


您还可以使用两个nth-child来使其正常工作:

$('div:nth-child(3n+2)').addClass('red');
$('div:nth-child(3n+3)').addClass('red');

实例:http://jsfiddle.net/gnbMH/1/


你也可以合并到两个nth-child,然后你得到这样的东西:

var elems = $('div:nth-child(3n+2)');
$('div:nth-child(3n+3)').each(function(i,elem) {
    elems.push(elem);
});

$(elems).addClass('red');

实例:http://jsfiddle.net/gnbMH/2/

答案 4 :(得分:0)

尝试使用:not(:nth-child(3n+1)) ..类似于.filter(':not(:nth-child(3n+1))').

DEMO