2011-02-06 157 views
0

我使用的是由Chris Coyier编写的Filtering Blocks代码,但我想为每个第三个“块”元素添加一个类'last'(以删除margin-right)。 到目前为止,我有这样的:过滤块+为每个第三个元素添加一个类

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> 

的jQuery:

 

$(function() { 

     var newSelection = ""; 

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

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

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

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

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

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

     }); 

}); 


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

最后一行的实际工作,并增加了一类 “最后”,以每3格,但是在过滤块之后,这个类将保留相同的div,这在第三个位置不是必需的。 所以,我的问题是 - 我怎样才能合并这两个函数,所以这个类将被加载到页面加载到每个第三个div,然后删除并在过滤块之后再次添加。

任何帮助或援助将不胜感激!

回答

1

轻微忽略,过滤需要隐藏元素,因此表达式“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"); 

}); 

看到这里的工作例如:http://jsfiddle.net/d7n8F/3/

+0

我试图实现您的解决方案,但我一定是做错了什么..这不工作:/这是我的代码:[链接](http://dronka.org/filtering-blocks.js) – Dronka 2011-02-06 13:53:59

相关问题