jQuery:not()+ nth-child

时间:2014-05-20 08:49:48

标签: jquery filter jquery-selectors css-selectors

具有以下DOM结构:

<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li class="click_here"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li class="click_here"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li class="click_here"></li>
</ul>

我尝试每5“li”添加“last”类,但不包括“click_here”类的那些。

我发现这不起作用:

$('ul li:not(.click_here)').filter(':nth-child(5n)').addClass('last');

我也尝试了几种方法,比如:

$('ul li').filter(':not(.click_here)').filter(':nth-child(5n)').addClass('last');
$('ul li').not($('.click_here')).filter(':nth-child(5n)').addClass('last')

似乎没有跳过具有“click_here”类的“li”项目。

所以我最后不得不这样做:

        $.each($('ul li').filter(':not(.click_here)'),function(i,v){
            if((i+1)%5 == 0) $(this).addClass('last');
        });

你们中有谁知道我的第一种方法中我做错了什么?

非常感谢!

2 个答案:

答案 0 :(得分:5)

我认为你不能使用nth-child,但请尝试

$('ul li:not(.click_here)').filter(function (i) {
    return i % 5 == 4
}).addClass('last');

演示:Fiddle

答案 1 :(得分:2)

这个版本与nth-child工作正常:

$('ul').find('li:not(".click_here")').filter(':nth-child(5n)').addClass( 'last' );

JS FIDDLE DEMO

$('ul').find('li:not(".click_here")').filter(':nth-child(5n)').addClass( 'last' );
.last {
    border-bottom: 2px dotted #000;
    background-color:#ff0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li class="click_here">
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li class="click_here">
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li>
    <li class="click_here">
</ul>