Jquery 过滤块+;向每3个元素添加一个类

Jquery 过滤块+;向每3个元素添加一个类,jquery,Jquery,我使用的是Chris Coyier编写的代码,但我想在每三个“block”元素中添加一个类“last”(去掉右边空白)。 到目前为止,我有: HTML <div id="blocks-nav"> <a rel="all" class="current">All</a> <a rel="www">Internet</a> <a rel="ci">Logo</a> </div>

我使用的是Chris Coyier编写的代码,但我想在每三个“block”元素中添加一个类“last”(去掉右边空白)。 到目前为止,我有:

HTML

<div id="blocks-nav">
     <a rel="all" class="current">All</a>
     <a rel="www">Internet</a>
     <a rel="ci">Logo</a>
</div>

<div id="blocks-gropup">
     <div class="block all www">
     <!-- some content -->
     </div>

     <div class="block all ci">
     <!-- some content -->
     </div>

     <div class="block all www">
     <!-- some content -->
     </div>

     <div class="block all ci">
     <!-- some content -->
     </div>

     <div class="block all ci">
     <!-- some content -->
     </div>

     <div class="block all www">
     <!-- some content -->
     </div>         

</div>
这最后一行实际上是有效的,并且每第三个div添加一个类“last”,但是在过滤块之后,该类将保留同一个div,这在第三个位置是不必要的。 所以,我的问题是-我如何合并这两个函数,以便在页面加载时将该类添加到每三个div中,然后在过滤块后删除并再次添加


任何帮助或协助都将不胜感激

轻微的疏忽,过滤需要隐藏元素,因此表达式“nth child(3n)”在过滤后根本不起作用。此外,修复代码非常简单,请参见以下内容:

$(function() {

    var newSelection = "";

    $("#blocks-nav a").click(function(){

        $("#blocks-group").fadeTo(200, 0.10);

        $("#blocks-nav a").removeClass("current");
        $(this).addClass("current");

        newSelection = $(this).attr("rel");

        $("div.block")
            .removeClass("last")
            .not("."+newSelection)
            .slideUp();

        $("div.block."+newSelection)
            .slideDown()
            // unfortunatly, have to use an .each()
            .each(function(i){
                if ( !((i+1) % 3) ) { // every third from result set.
                    $(this).addClass("last")
                }
            });

        $("#blocks-group").fadeTo(600, 1);

    });

    $("#blocks-group > div.block:nth-child(3n)").addClass( "last" );

});

请参阅此处的工作示例:

我已尝试实施您的解决方案,但我一定是做错了什么。。这是我的代码:任命,新的解决方案。保留了对旧的无效解决方案的引用,因为我仍然认为该技术相当不错。您的新解决方案非常有效,但不是我需要的工作方式。它只将类“last”添加到最后一个元素,而不是每三个元素添加一次。是否有任何其他选项(除了表达式“nth child(3n)”之外)可以将类添加到每三个元素中,这将与过滤/隐藏元素一起工作?好的,再次更新代码,并使用working example.BGerrissen创建新的JSFIDLE链接。您是最好的!万分感谢!
$(function() {

    var newSelection = "";

    $("#blocks-nav a").click(function(){

        $("#blocks-group").fadeTo(200, 0.10);

        $("#blocks-nav a").removeClass("current");
        $(this).addClass("current");

        newSelection = $(this).attr("rel");

        $("div.block")
            .removeClass("last")
            .not("."+newSelection)
            .slideUp();

        $("div.block."+newSelection)
            .slideDown()
            // unfortunatly, have to use an .each()
            .each(function(i){
                if ( !((i+1) % 3) ) { // every third from result set.
                    $(this).addClass("last")
                }
            });

        $("#blocks-group").fadeTo(600, 1);

    });

    $("#blocks-group > div.block:nth-child(3n)").addClass( "last" );

});