我尝试使用多个复选框进行过滤,并且我已经使用了此示例中答案中的代码:Jquery filtering with multiple Checkboxes它的效果非常好,但我需要将结果显示为复选框。目前它只与复选框过滤结果完全匹配。如果对象包含任何1个数组,而不是数组,则希望它显示所有结果。我不能在我的特定项目中使用同位素,但它就像这个同位素示例:
<a href="http://codepen.io/desandro/pen/btFfG">
编辑:特别是我知道需要改变的代码。目前它循环遍历数组并显示内容,如果该元素与该复选框类别匹配。我需要它遍历数组并显示内容,如果任何类别匹配任何数组变量:
// 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 :(得分:0)
在外圈:
$.each(selectedFilters, function(name, filterValues) {...
您正在逐步迭代每个选定的过滤器,从而消除那些与过滤器不匹配的过滤器。
$filteredResults = $filteredResults.filter(function() {...
通过它的唯一项目满足所有过滤器(即您正在进行逻辑AND操作)。相反,您需要过滤.card
项一次,如果项的任何$(this).data('category')
值与任何选定过滤器匹配,则返回true。这样你就可以进行逻辑OR操作。