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, Однако это меняет семантику, если у вас есть несколько вещей, которые вы можете добавить в свою витрину.

Другие вопросы по тегам