2017-11-27 10 views
0

関連する値でタグ付けされたすべての項目を表示する必要があるJavaScriptフィルターで作業しています。現時点では、割り当てられた値のいずれかを持っている限りアイテムを表示するのではなく、これらの各値が割り当てられているアイテムを表示するように機能しています。ANDフィルターをORフィルターに更新するJavascript

たとえば、猫と犬をチェックすると、割り当てられているアイテムを表示するだけでなく、これらの値のいずれかが割り当てられているすべての投稿を表示します。

マイコード例は以下である:

var $filterCheckboxes = $('input[type="checkbox"], input[type="radio"]'); 
      $filterCheckboxes.on('change', function() { 
       var selectedFilters = {}; 
       $filterCheckboxes.filter(':checked').each(function() { 
        if (!selectedFilters.hasOwnProperty(this.name)) { 
         selectedFilters[this.name] = []; 
        } 
        selectedFilters[this.name].push(this.value); 
       }); 

       var $filteredResults = data; 

       // console.log('filtered data: ' + $filteredResults); 

       $.each(selectedFilters, function(name, filterValues) { 
        $filteredResults = $filteredResults.filter(function(item) { 
         var matched = false, 
          currentFilterValues = item.Tags; 

         console.log(currentFilterValues); 

         $.each(currentFilterValues, function(_, currentFilterValue) { 
          if ($.inArray(currentFilterValue, filterValues) != -1) { 
           matched = true; 
           return false; 

           console.log(currentFilterValue); 
          } 
         }); 
         return matched; 

        }); 
       }); 

どのような援助が理解されるであろう。

+0

あなたは 'console.log'sの出力を共有し、どの出力が異なっていなければならないのかを指定できますか? – gurvinder372

+0

最初のチェックボックスをクリックすると、出力として表示されます。 (6)["ブログ"、 "ケーススタディ"、 "建設金融"、 "グローバルビジネスモニタ"、 "建設金融"、 "インサイト" ] ["Insight"、 "Construction"、 "Construction Finance"] ["Insight"] (2)["ブログ"、 "インサイト"] Finance "] –

+0

ブログのタグを表示しているすべてのアイテムを表示しているので、次のアイテム(例:ケーススタディ)を確認するとすぐに、両方のアイテムが表示されます。私が試してみる必要があるところでは、両方のタグとは対照的に、どちらかのタグを持つアイテムのすべてを表示する必要があります。 –

答えて

0

私は別のルートを下って行き、それは私が所望の方法を実行している取得するコードを最小化:

var $filterCheckboxes = $('input[type="checkbox"], input[type="radio"]'); 
      $filterCheckboxes.on('change', function() { 
       var $filteredResults = data; 
       var selectedFilters = []; 

       $filterCheckboxes.filter(':checked').each(function() { 
        selectedFilters.push(this.value); 
       }); 

       $filteredResults = data.filter(function(item) { 
        return (_.intersection(item.Tags, selectedFilters).length > 0); 
       }); 
      }); 

選択されたタグ(s)が一致したのであれば今すぐチェックボックスがチェックされたすべての時間は、それが見るであろうアイテム内のタグ(該当する場合)は、一致するアイテムを取得してリストに表示します。