我想要一个jQuery函数来过滤一组data-attributes
。
在我的HTML结构中,我有许多列表项,它们的属性是:
data-offer
和data-subcat
这两个将用于过滤出使用多个输入复选框的项目。
到目前为止,这个jQuery执行过滤,但不是我想要的。
$(".cs-widget-content").on("change", "input[type=checkbox]", function () {
$(".five-column > li.column").hide();
$(".cs-widget-content").find("input:checked").each(function (i, el) {
$(".five-column > li.column").filter('[data-offer="' + el.id + '"]').show();
});
$(".cs-widget-content").find("input:checked").each(function (j, el) {
$(".five-column > li.column").filter('[data-subcat="' + el.id + '"]').show();
});
});
JSFiddle
解决方案:
所有的数据应该加载在页面加载(这是工作)
两个数据属性的输入过滤器应该一起工作(例如,当输入检查
data-offer
时,它将显示该数据,如果检查data-subcat
,它将显示该属性的数据,以及在之前检查的data-offer
内。当任何输入为unChecked时,数据应该是可见的。
期待您的帮助。
谢谢
遍历产品而不是过滤器,并决定是否应该显示每个产品。
var filter1HasChecked = $("[data-filter=1]:checked").length;
var filter2HasChecked = $("[data-filter=2]:checked").length;
$("ul.products li").each(function(i,v){
var $this = $(this);
if((!filter1HasChecked || $("#" + $this.data("offer")).is(":checked"))
&& (!filter2HasChecked || $("#" + $this.data("subcat")).is(":checked"))){
$this.show();
}
});
http://jsfiddle.net/Curt/k62kxm0x/4/如果有100个条目,这种操作将变得非常昂贵,但是我建议使用AJAX进行一些服务器端过滤,或者可能实现像AngularJS这样的前端框架。