jQuery .detach / append в операторе if/else
У меня есть небольшая проблема с созданием фильтра категорий для моей пользовательской таксономии типа записей, я пробовал много разных вещей в jQuery, и я думаю, что это должен быть лучший способ получить то, что я хочу.
Код:
var divs;
$('.category').on('click', function() {
if(divs == 1) {
alert('ayylmao?');
$('section#showcase').append(detached);
divs = 0;
} else {
divs = 1;
var lolxd = $(this).find('a').attr('id');
alert(lolxd);
var detached = $('section#showcase').contents().not("." + lolxd).detach();
}
});
Некоторое время назад я использовал jQuery, но по какой-то причине var 'detached' не будет добавляться к демонстрации раздела.
Хотелось бы услышать, что я делаю не так;_;
1 ответ
detached
объявлен в вашей функции обработчика кликов. Это означает, что он создается заново при каждом запуске функции.
Сравните это с вашим использованием divs
который объявляется вне функции и, таким образом, сохраняется во всех вызовах функций.
Есть много способов решить эту проблему, но самым простым будет следовать той же схеме, что и для divs
и иметь код, который выглядит так:
var divs;
var detached;
$('.category').on('click', function() {
if(divs == 1) {
alert('ayylmao?');
$('section#showcase').append(detached);
divs = 0;
} else {
divs = 1;
var lolxd = $(this).find('a').attr('id');
alert(lolxd);
detached = $('section#showcase').contents().not("." + lolxd).detach();
}
});
Говоря в более общем плане, звучит так, как будто вы отсоединяете витрину, вы хотите сохранить ее, чтобы потом добавить ее обратно. В зависимости от состава вашей программы, может быть более полезным просто изменить display
этого предмета в none
, Однако это меняет семантику, если у вас есть несколько вещей, которые вы можете добавить в свою витрину.