基于http://tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/教程,我正在尝试为我的应用程序实现排序功能。
问题:
我有这些项目,稍后我会用这种格式的quicksand jquery插件排序:
<ul>
<li class="car">Audi A6</li>
<li class="car">Audi A8</li>
<li class="car">BMW 328Ci</li>
<li class="hobby">Skying</li>
<li class="hobby">Skating</li>
<li class="hobby">Running</li>
<li class="food">Pizza</li>
<li class="food">Salat</li>
<li class="food">Chicken</li>
</ul>
然后我有3个复选框用于排序要显示的内容和不显示的内容:
<ul id="filter_sources">
<li><input type="checkbox" id="source" value="car" />car</li>
<li><input type="checkbox" id="source" value="hobby" />hobby</li>
<li><input type="checkbox" id="source" value="food" />food</li>
</ul>
我想要做的是,对于每个选中的复选框,运行流沙插件并显示复选框,如果选中汽车和爱好复选框以显示汽车和爱好列表
我问这个是因为在教程中他们这样做:
$('#filter_sources').live('click',function(e){
var link = $(this);
link.addClass('active').siblings().removeClass('active');
// Using the Quicksand plugin to animate the li items.
// It uses data('list') defined by our createList function:
$('#videosList').quicksand(link.data('list').find('li'));
e.preventDefault();
});
我做了一些尝试尝试每个检查输入,但我没有成功。
答案 0 :(得分:3)
经过测试,并且明显地工作:
$('input:checkbox').change(
function(){
var show = $('input:checkbox:checked').map(function(){
return $(this).val();
});
console.log(show);
$('#list li').each(
function(){
if ($.inArray($(this).attr('class'),show) > -1) {
$(this).show();
}
else {
$(this).hide();
}
});
});
请注意,为了简单起见并避免使用not()
方法,我选择将id
分配给包含要过滤的元素的列表。
已编辑以回应OP的评论:
[只]一个问题,当您在选择其中任何一个后取消选中所有复选框时,所有结果都会消失......
$('input:checkbox').change(
function(){
var show = $('input:checkbox:checked').map(function(){
return $(this).val();
});
if (show.length > 0){
$('#list li').each(
function(){
if ($.inArray($(this).attr('class'),show) > -1) {
$(this).show();
}
else {
$(this).hide();
}
});
}
else {
$('#list li').show();
}
});
JS Fiddle demo。 参考文献: