2014-01-25 72 views
0

我嘗試在使用Isotope.js的類似投資組合的頁面內使用多個過濾器。請看看這個頁面:http://decart-design.com/avancia-wp/vi-tilbyr/。單過濾器工作正常,但不是多個過濾器不:(這是我使用的一段JS代碼:jQuery Isotope - 多個過濾器的問題

jQuery('.filtering li').on('click', 'a', function(e) { 
e.preventDefault(); 

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

var filters = {}, 
    optionSet = jQuery(this).parents('.option-set'); 

jQuery(this).parent().parent().find('li').removeClass('selected'); 
jQuery(this).parent().addClass('selected'); 

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

var isoFilters = []; 
for (var prop in filters) { 
    isoFilters.push(filters[prop]); 
} 
var selector = isoFilters.join(''); 
var portfolioItems = jQuery(this).parent().parent().parent().parent().find('.filterable-items'); 
portfolioItems.isotope({ filter: selector }); 

console.log(selector); 

return false; 

});

由於某種原因(我不明白爲什麼),但isoFilters.push(filters[prop]);只是不起作用。在我點擊第二個過濾器後,items數組只是用新值替換,而不是將其添加到此數組。正如你在控制檯中看到的那樣,它只是用新值替換而不是將它添加到數組中。這太奇怪了......

這是來自作者網站的一個工作示例:http://isotope.metafizzy.co/demos/combination-filters.html

請別人幫我弄清楚我做錯了什麼? 預先感謝您!希望有人能幫我解決這個問題。

最好的問候, 亞歷

回答

0

我已經找到一種方法來解決這個問題。這是一個正確的代碼:

jQuery('.filtering li').on('click', 'a', function(e) { 
e.preventDefault(); 

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

jQuery(this).parent().parent().find('li').removeClass('selected'); 
jQuery(this).parent().addClass('selected'); 

var isoFilters = []; 
var elems = jQuery(this).parents('.filter-wrap').find('li.selected a'); 
jQuery.each(elems, function(i, e){ 
    isoFilters.push(jQuery(e).attr('data-filter')); 
}); 

var selector = isoFilters.join(''); 
var portfolioItems = jQuery(this).parent().parent().parent().parent().find('.filterable-items'); 
portfolioItems.isotope({ filter: selector }); 

console.log(selector); 

return false; 

});

希望這會幫助那些遇到類似問題的人。