2016-07-28 17 views
-1

複数のチェックボックスを使用してフィルタリングしようとしていますが、この例のコードを使用しました:Jquery filtering with multiple Checkboxesこれは本当にうまく動作しますが、現時点では、チェックボックスのフィルタ結果と正確に一致します。オブジェクトに配列の1つが含まれていて、配列が正確には含まれていない場合は、すべての結果を表示します。私は特定のプロジェクトのための同位体を使用することはできませんが、それは、この同位体の例のようになります:複数の組み合わせチェックボックスを使用したJqueryフィルタリング

<a href="http://codepen.io/desandro/pen/btFfG"> 

EDIT:それは、このコードのビットだinparticular私は変化するニーズを知っています。現時点では配列をループし、要素がチェックボックスのカテゴリと厳密に一致する場合は内容を表示します。外側のループでは

 // create a collection containing all of the filterable elements 
     var $filteredResults = $('.card'); 

     // loop over the selected filter name -> (array) values pairs 
     $.each(selectedFilters, function(name, filterValues) { 

      // filter each .card element 
      $filteredResults = $filteredResults.filter(function() { 

       var matched = false; 
       var currentFilterValues = $(this).data('category').split(' '); 

       // loop over each category value in the current .card's data-category 
       $.each(currentFilterValues, function(_, currentFilterValue) { 

        // if the current category exists in the selected filters array 
        // set matched to true, and stop looping. as we're ORing in each 
        // set of filters, we only need to match once 
        if ($.inArray(currentFilterValue, filterValues) != -1) { 
         matched = true; 
         return false; 
        } 
       }); 

       // if matched is true the current .card element is returned 
       return matched; 

      }); 
     }); 
+0

特に理解しづらいコードについては何かありますか?ここでやったように、オンラインの例のコードを使用するときは、何が行われているのか、なぜ、どのように実装されているのかを理解することが重要です。そうすれば、あなたは厄介なバグに驚かされることはありません。少なくとも、どこを見るかという考えがあります。それがそうであるように、ランダムなインターネットコードはあなたが望むものを正確にやっていないし、あなたのためにそれを修正する人を求めている。あなたが理解しようとしたことを示すことは良いことであり、[短い例で]つまずいている(http://meta.stackexchange.com/q/22754/218143) – tmpearce

+0

ありがとう、私はちょうど私の答えを編集しました。私は変更する必要があるコードの部分を知っていると私はそこに何を理解しています。私はほとんどそこにいると思う、私はちょうど論理と必要な機能の周りに私の頭を取得しようとしている。私は上記の質問を編集してうまくいけばもっとうまく説明できます... – Julz

答えて

0

$.each(selectedFilters, function(name, filterValues) {... 

あなたがそれぞれを反復処理されているカテゴリのいずれかが、配列変数のいずれかに一致する場合、私は、配列をループにそれを必要としてコンテンツを表示します選択されたフィルタは、フィルタと一致しないフィルタを徐々に削除します。

$filteredResults = $filteredResults.filter(function() {... 

満足を介してすべてのフィルタ(すなわち、論理AND演算を行っているが)それを作るアイテムのみ。代わりに、.cardアイテムを一度フィルタリングし、アイテムの$(this).data('category')値のいずれかが選択したフィルタのいずれかと一致する場合はtrueを返します。このようにして、代わりに論理OR演算を行います。

関連する問題