2016-07-28 2 views
-1

Я пытаюсь фильтровать с несколькими флажками, и я использовал код из ответа в этом примере: Jquery filtering with multiple Checkboxes Он работает очень хорошо, но мне нужны результаты, чтобы показать комбинацию флажков. На данный момент он точно соответствует результату фильтра checkbox. Я хочу, чтобы он показывал все результаты, если объекты содержат только один массив, а не массив. Я не могу использовать изотоп для моего конкретного проекта, но это было бы как этот изотопной например:Блокировка 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() {... 

Единственные элементы, которые делают его через удовлетворяют все фильтры (т.е. вы делаете логической операции). Вместо этого вам нужно отфильтровать элементы .card один раз, возвращая значение true, если какой-либо из значений $(this).data('category') для элемента соответствует любому из выбранных фильтров. Таким образом, вы выполняете логическую операцию ИЛИ.

Смежные вопросы