您需要一個多維數組,每個過濾器類型都有一個數組維數。我之前就已經完成了,現場演示示例here!
請參閱here!爲js。
在我的JS文件,你會感興趣的最終函數調用getComboFilters(過濾器)
function getComboFilter(filters) {
var i = 0;
var comboFilters = [];
var message = [];
for (var prop in filters) {
message.push(filters[ prop ].join(' '));
var filterGroup = filters[ prop ];
// skip to next filter group if it doesn't have any values
if (!filterGroup.length) {
continue;
}
if (i === 0) {
// copy to new array
comboFilters = filterGroup.slice(0);
}
else {
var filterSelectors = [];
// copy to fresh array
var groupCombo = comboFilters.slice(0); // [ A, B ]
// merge filter Groups
for (var k=0, len3 = filterGroup.length; k < len3; k++) {
for (var j=0, len2 = groupCombo.length; j < len2; j++) {
filterSelectors.push(groupCombo[j] + filterGroup[k]); // [ 1, 2 ]
}
}
// apply filter selectors to combo filters for next group
comboFilters = filterSelectors;
}
i++;
}
comboFilters.sort();
var comboFilter = comboFilters.join(', ');
return comboFilter;
}
這個函數處理所有的推,拼接和各組濾波器陣列,但使用的排序它,你需要將它添加到您的濾波器程序......好吧我說的常規,但它真正的套路,因爲你似乎調用過濾方法2不同的時間:
$container.isotope({ filter: '.ccskills' });
及更高版本:
$container.isotope({filter: .industry});
如果您要過濾所有類型的過濾器,您必須知道對方,這意味着它們必須位於同一個javascript外殼內,並且只需要調用過濾器方法一旦在此時間,它會針對您的所有過濾器類型條件進行測試。
使用getComboFilter(過濾器)函數調用組合式過濾器的方法是這樣的:
var $container = $('#library');
var comboFilter = getComboFilter(filters);
$container.isotope({ filter: comboFilter });
最後,全面融入你的文件將是somethign這樣的:
var $container = $('#library');
var comboFilter = getComboFilter(filters);
$container.isotope({ filter: comboFilter });
// This next part targets all the possible filter items
// i.e. '.option-set a' just like your example
$('.option-set a').click(function(){
// exit directly if filter already disabled
if ($(this).hasClass('disabled')){
return false;
}
var $this = $(this);
var $optionSet = $(this).parents('.option-set');
group = $optionSet.attr('data-filter-group');
// store filter value in object
var filterGroup = filters[ group ];
if (!filterGroup) {
filterGroup = filters[ group ] = [];
}
var comboFilter = getComboFilter(filters);
$container.isotope({ filter: comboFilter });
});
function getComboFilter(filters) {
var i = 0;
var comboFilters = [];
var message = [];
for (var prop in filters) {
message.push(filters[ prop ].join(' '));
var filterGroup = filters[ prop ];
// skip to next filter group if it doesn't have any values
if (!filterGroup.length) {
continue;
}
if (i === 0) {
// copy to new array
comboFilters = filterGroup.slice(0);
}
else {
var filterSelectors = [];
// copy to fresh array
var groupCombo = comboFilters.slice(0); // [ A, B ]
// merge filter Groups
for (var k=0, len3 = filterGroup.length; k < len3; k++) {
for (var j=0, len2 = groupCombo.length; j < len2; j++) {
filterSelectors.push(groupCombo[j] + filterGroup[k]); // [ 1, 2 ]
}
}
// apply filter selectors to combo filters for next group
comboFilters = filterSelectors;
}
i++;
}
comboFilters.sort();
var comboFilter = comboFilters.join(', ');
return comboFilter;
}
希望這幫助別人!演示非常漂亮。
你不可能這樣做,因爲用戶不能同時進行這兩個操作。否則使用全局變量來收集數據並使用數組merge [r]或類似的東西 – Val
Thanks Val。我想將過濾器組合爲兩個獨立的操作 - 我只需確保這些過濾器組合一起執行。否則,我最終會得到我目前擁有的,這是最後一個覆蓋前一個操作的操作!我會看看你建議的合併。 – BellamyStudio
我想我已經想通了(有點不雅!) - 我正在檢查每個功能的「其他」列表,並將過濾器附加到我正在更新的過濾器上。像這樣:'\t $( 「#行業下拉菜單」)選擇()變化( \t \t功能(){ \t \t \t VAR產業= $( 「選項:選擇」,這一點)。VAL(); \t \t \t var publisher = $ optionSets.find('a.selected')。attr('data-option-value'); \t \t \t $ container.isotope({filter:industry + publisher}); \t \t} \t);' – BellamyStudio