Исключение для элементов изотопного фильтра?

Я использую следующий код для фильтрации контента в моей сетке через меню фильтров по адресу http://themes.visualise.ca/visualise/

$('.menu-categories-navigation-container a').click(function(){
    var category = $(this).parent().attr('class');
    var filters = ('.'+category);
    $container.isotope({
        filter: filters,
    });
    return false;
});

Но я бы хотел, чтобы элемент с классом .thelogo всегда оставался видимым, так как логотип и меню являются частью моей сетки. Поэтому я подумал, что мог бы использовать какой-то синтаксис, чтобы добавить какое-то исключение? Может быть, есть лучший способ?

Большое спасибо за ваше время и помощь.


person Gab    schedule 19.11.2011    source источник


Ответы (2)


Свойство filter в isotope представляет собой строку селектора, не стесняйтесь добавлять составные селекторы (просто добавьте к нему .thelogo).

$('.menu-categories-navigation-container a').click(function(){
    $container.isotope({
        filter: '.thelogo, .' + $(this).parent().attr('class')
    });
    return false;
});

ps: это не удастся, если какой-либо элемент имеет более одного класса. Поскольку селектор мог бы подумать, что он ищет тег с именем второго класса внутри первого.

редактировать: забыл период

person Sinetheta    schedule 19.11.2011
comment
Это не работает ... Элементы - это сообщения WordPress, поэтому да, у каждого из них есть более одного класса. - person Gab; 19.11.2011
comment
... но вы все равно мне очень помогли, спасибо. См. ответ ниже, переменная фильтров необходима для включения точки перед классом, я думаю. - person Gab; 19.11.2011
comment
Не совсем, вы просто создаете строку для использования в качестве фильтра .thelogo, .myClass. Ваш код тоже делает это, просто нет необходимости объявлять эти две переменные, чтобы выполнить работу. Что касается нескольких классов, какую логику вы хотите здесь сделать? Должен ли фильтр соответствовать ВСЕМ классам выбранного элемента? ЛЮБОЙ из них? - person Sinetheta; 19.11.2011
comment
Я полностью понимаю вашу точку зрения. Я не опытный кодер, и мне это помогает лучше понять, какую информацию мы используем. ;-) - person Gab; 19.11.2011
comment
Конечно, лучше, чтобы ваш код был понятен ВАМ. И, честно говоря, когда вы создаете строку на лету, как это сделано выше, javascript ДЕЛАЕТ столько же работы, сколько если бы вы явно объявили переменную. Так что, возможно, компромиссом будет использование вашего метода с одной строкой. Следующее будет точно так же эффективно, как мой код, и может быть таким же читабельным, как ваш. var filter = '.thelogo, .' + $(this).parent().attr('класс'); - person Sinetheta; 19.11.2011

Решение...

$('.menu-categories-navigation-container a').click(function(){
        var category = $(this).parent().attr('class');
        var filters = ('.'+category);
        $container.isotope({
            filter: '.thelogo, ' + filters,
        });
        return false;
});
person Gab    schedule 19.11.2011