以下功能允许用户按数据属性过滤产品,并通过创建所选值的数组,同时适应多个值的过滤。我需要显示与任何过滤器匹配的所有结果,因此我使用OR
语句构造了该函数。如何修改它对checked.filter(".all")
的响应方式,以便它不会显示所有产品,而只是不按该数据属性进行过滤?
我在这里发布了一个功能性示例的小提琴:http://jsfiddle.net/chayacooper/hSwcr/1/如果选中'Sleeveless'+'Red'则会显示所有“无袖”或“红色”的项目。如果用户然后选中“所有颜色”,则我要忽略颜色过滤器(data-color="All"
)并仅应用样式过滤器(data-style="Sleeveless"
) - 这样它就会显示2个项而不是所有项。
var selected = { color: [], style: [] };
$('.filterOptions').on("change", ":checkbox", function (e) {
var type = $(e.delegateTarget).data("type");
var $this = $(this);
var attrValue = $this.data(type);
if ($this.parent().hasClass("active")) {
$this.parent().removeClass("active");
selected[type].splice(selected[type].indexOf(attrValue),1);
}
else {
$this.parent().addClass("active");
selected[type].push(attrValue);
}
var checked = $(":checked", ".filterOptions");
// show all of the available options if...
if (checked.length == 0 || checked.filter(".all").length > 0) {
$('#content').find('*').show();
}
else {
$("#content").find("*").hide();
for (var key in selected) {
$.each(selected[key], function(index,item) {
$('#content').find('[data-' + key + ' *="' + item + '"]').show();
});
}
}
});
答案 0 :(得分:0)
如何更改if
逻辑:
if (checked.length == 0 // ...no boxes are checked
|| // ...or...
checked.filter(".all").length > 0)
类似于:
if (checked.not(".all").length == 0)
这允许单个过滤器覆盖“所有”逻辑。