我想按类过滤(显示/隐藏)元素。我想让5个过滤器一起工作。
<select id='filter4'>...</select>
<select id='filter5'>...</select>
<select id='filter6'>...</select>
<select id='filter7'>...</select>
和
<select id='filter6' multiple>...</select>
jquery的:
jQuery(document).ready(function ($) {
$("select").on("change", function () {
var filterVal = $("select#filter4").val();
var filterVal2 = $("select#filter5").val();
var filterVal3 = $("select#filter6").val();
var filterVal4 = $("select#filter7").val();
var filterVal5 = $("select#filter8").val();
var filterSelector = "";
var filter2Selector = "";
var filter3Selector = "";
var filter4Selector = "";
var filter5Selector = "";
if (filterVal == "all" && filterVal2 == "all" && filterVal3 == "all" && filterVal4 == "all" && filterVal5 === null) {
//show all items
$(".item").fadeIn("fast");
} else {
if (filterVal != "all") {
filterSelector = "." + filterVal;
}
if (filterVal2 != "all") {
filter2Selector = "." + filterVal2;
}
if (filterVal3 != "all") {
filter3Selector = "." + filterVal3;
}
if (filterVal4 != "all") {
filter4Selector = "." + filterVal4;
}
if (filterVal5 !== null) {
filter5Selector = "." + filterVal5;
}
$(".item").hide();
$(filterSelector + filter2Selector + filter3Selector + filter4Selector + filter5Selector).fadeIn("fast");
}
});
});
请参阅everything in this jsfiddle!
前四个单个过滤器可以解决任何问题。当选择了多个选项时,第五个多选元素无法正常工作(过滤)。
编辑:在全局匹配的g修饰符(/ / g)的帮助下,需要用点(多个css选择器)替换逗号:
$(filter4Selector + filter5Selector.replace(/,/g, ".")).fadeIn("fast");
请参阅http://jsfiddle.net/mahish/dum7n/。
下面的答案提供了不同的代码,也可以使用!
答案 0 :(得分:2)
清理代码并修复多个查询。请注意:
.class1.class2.class3
表示class1 && class2 && class 3
.class1, .class2, .class3
表示class1 || class2 || class 3
这是评论中早先混淆的原因。
jQuery(document).ready(function ($) {
var values = [7, 8];
$("select").on("change", function () {
var showAll = true,
show = [],
joined;
$.each(values, function (index, id) {
var $el = $('#filter' + id),
multi = $el.attr('multiple'),
val = $el.val();
if (multi) {
if (val !== null) {
showAll = false;
$.each(val, function (i, v) {
show.push( v );
});
}
} else {
if (val != 'all') {
showAll = false;
show.push( val );
}
}
});
console.log(showAll);
console.log(show);
if (showAll) {
//show all items
$(".item").fadeIn("fast");
} else {
joined = '.' + show.join('.');
console.log( joined );
$(".item").hide();
$( joined ).fadeIn("fast");
}
});
$.each(values, function (index, id) {
$('#filter' + id).chosen();
});
});
答案 1 :(得分:0)
用逗号分隔选择器,这应该有效(google jQuery multiple selectorors获取更多信息)