Флажок Foreach проверен, чтобы сделать плагин Quicksand JQuery
Основываясь на учебнике 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>
Я хочу, чтобы для каждого установленного флажка был запущен плагин quicksand и отображались отмеченные флажки, поэтому если флажки " автомобиль" и " хобби" установлены, чтобы отобразить списки автомобилей и хобби.
Я спрашиваю об этом, потому что в уроке они делают это следующим образом:
$('#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();
});
и я сделал несколько попыток для каждого проверенного ввода, но мне не удалось.
1 ответ
Проверено и, наглядно, работает:
$('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. Рекомендации: