2015-03-26 6 views
0

Использование изотопа для фильтрации, и каждый элемент находится в пределах определенной группы. Заголовки групп каждого элемента стекаются поверх другого при фильтрации, и я не уверен, что лучший способ скрыть заголовки, когда они не активны/не выбраны.Скрыть группированные изотопные элементы Заголовки

Каждый элемент .person, но в заголовках также есть класс .sub-head. Есть ли способ добавить .sub-head в itemSelector? Или добавить еще один var для фильтрации?

Мой код расслоение плотной:

//***********DIRECTORY SCRIPTS*********** 
var $j = jQuery.noConflict(); 
$j('#directory').imagesLoaded(function() { 

    var $container = $j('#directory'); 
    filters = {}; 

    $container.isotope({ 
     itemSelector: '.person', 
     layoutMode : 'fitRows' 
    }); 

    $j('.filter .button a').click(function(){ 
     var $this = $j(this); 

     if ($this.hasClass('selected')) { 
     return; 
     } 

     var $optionSet = $this.parents('.option-set'); 

     $optionSet.find('.selected').removeClass('selected'); 
     $this.addClass('selected'); 

     var group = $optionSet.attr('data-filter-group'); 
     filters[ group ] = $this.attr('data-filter'); 

     var isoFilters = []; 
     for (var prop in filters) { 
     isoFilters.push(filters[ prop ]) 
     } 
     var selector = isoFilters.join(''); 
     $container.isotope({ filter: selector }); 

     return false; 
    }); 
}); 

Ниже приведен скриншот, который показывает, как выбран «Научно-исследовательский факультет» и появляются соответствующие элементы. Но как я могу скрыть другие заголовки?

screenshot

[Примечание: Я использую это с PHP и запросов WordPress, но думаю, что это вопрос JS. При необходимости я могу предоставить полный исходный код; не хотел просто сбрасывать все это здесь]

ответ

0

Вы уже выбираете элементы для удаления класса '.selected' из заголовков.

var $optionSet = $this.parents('.option-set'); 

     $optionSet.find('.selected').removeClass('selected'); 
     $this.addClass('selected'); 

Теперь только текущий заголовок имеет «.selected» класса, так что вы можете скрыть все опции установки, кроме того, который имеет этот класс

$optionSet.not('.selected').hide(); 
+0

Спасибо! Однако размещение этого фрагмента сразу после '$ this.addClass ('selected');' удаляет кнопки фильтра, а не заголовки ... – timmyg

+0

Хорошо, я не знаю о вашей разметке HTML. Я давал идею. Если вы можете поместить свой HTML, я могу указать правильный селектор для заголовка. – wonderbell

+0

Я не помещал HTML, потому что там действительно так много (3-4 diff php-файлы и 1-2 скрипта, yay CMS ..). Пример поведения стекирования с полным html можно увидеть здесь (http://eps.jhu.edu/people/). Однако мне удалось решить проблему: в каждом заголовке были добавлены все фильтры данных; поэтому они никогда не исчезали. Удаление этих значений означает, что они появляются, когда выбрано «Просмотреть все», но скрыто в противном случае. – timmyg

Смежные вопросы