2011-02-06 14 views
0

Chris Coyierが書いたFiltering Blocksコードを使用していますが、3番目の 'block'要素に 'last'クラスを追加したいとします。ブロックのフィルタリング+すべての3番目の要素にクラスを追加する

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'); 

この最後の行は、実際に動作し、すべての第三のdivにクラス "最後" を追加し、ブロックをフィルタリングした後、クラスは同じdivで残りますが、3番目の位置では必要ありません。 私の質問は - これらの2つの関数をどのようにマージすることができるので、クラスはページロード時に3番目の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

+0

アプリケーション、新しい解決策。私はまだこのテクニックはかなりダンディーだと思うので、古い無効な解決策への参照を保持します。 – BGerrissen

+0

あなたの新しいソリューションは素晴らしいですが、私はそれが動作するために必要な方法ではありません。最後の要素にのみ 'last'クラスを追加します。 3番目の要素すべてにクラスを追加するための他の(式「nth-child(3n)」以外の)オプションがあります。これはフィルタリング/隠蔽要素で機能しますか? – Dronka

関連する問題