这是我上一个问题的后续解答:Multiple checkbox filter: how to get both and additive and subtractive effect 非常感谢在上一个问题中为我提供帮助的每个人。基本上,我想根据它们具有的类来制作用于隐藏和显示div项目的复选框。过滤器分为两个类别,每个类别中都有两个选项: cityFilter (hamiltonFilter + torontoFilter)和 costFilter (cheapEatsFilter + costFilter)。 先前的答案有效,但每个类别中仅 个内;当我单击“ hamiltonFilter”和“ cheapEatsFilter”时,它不会缩小结果,而是向我显示所有带有任一类的 https://jsfiddle.net/de1zc7vx/1/ 编辑:放入错误的小提琴 答案 0 :(得分:0)
<div>
个元素的数量(即,单击“ hamiltonFilter”和“ torontoFilter”应显示<div>
个元素,其中包含课)<div>
元素的数量(即,单击“ hamiltonFilter”和“ cheapEatsFilter”应仅显示具有以下内容的<div>
个元素两个课程)<div>
元素。我尝试修改他们的代码,但无法弄清楚如何为两个类的<div>
元素进行选择。$(document).ready(function() {
$('#checkboxFilterContainer').find('input:checkbox').on("change", function() {
var $citiesIDs, $costIDs = [];
var $citiesCategory = $('#citiesFilterContainer').find('input:checked');
var $costCategory = $('#costFilterContainer').find('input:checked');
$citiesCategory.each(function(index, element) {
$citiesIDs.push(element.getAttribute('id'));
});
$costCategory.each(function(index, element) {
$costIDs.push(element.getAttribute('id'));
});
var $totalLength = ($citiesIDs.length + $costIDs.length);
if ($totalLength == 0) {
$('.blogpost').removeClass('hide');
} else {
$('.blogpost').addClass('hide');
for(i = 0; i < $totalLength; i++) {
var x = $citiesIDs[i];
var y = $costIDs[i];
var xClass = $('.' + x);
var yClass = $('.' + y);
$('.x.y').removeClass('hide');
}
}
})
})
1 个答案:
var $filteredPosts = $('.blogpost').addClass('hide');
if ($totalLength) {
var citiesOrSelector = '.'+ $citiesIDs.join(',.');
var costsOrSelector = '.'+ $costIDs.join(',.');
if ($citiesIDs.length) $filteredPosts = $filteredPosts.filter(citiesOrSelector);
if ($costIDs.length) $filteredPosts = $filteredPosts.filter(costsOrSelector);
}
$filteredPosts.removeClass('hide');