我正在开发一个JavaScript过滤器,需要显示所有标有相关值的项目。目前我让它工作,以便显示已分配每个值的项目,而不是显示项目,只要它们具有指定的值之一。
因此,例如,如果我检查Cats and Dogs,我想显示分配了这些值中的任何一个的每个帖子,而不是仅显示已分配的项目。
我的代码示例如下:
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 :(得分: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);
});
});
所以现在每次选中一个复选框时,都会看到所选标签是否与项目中的标签匹配,如果是,它会抓取任何匹配的项目并在列表中显示它们。