您需要一个多维数组,每个过滤器类型都有一个数组维度。我以前做过,这里有一个现场演示示例!
看这里!对于 js。
编辑(2020 年 2 月):演示和 JavaScript 的链接已在 2020 年更新,带有回程机器 url
在我的 js 文件中,您将对名为 getComboFilters( filters ) 的 end 函数感兴趣
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( filters ) 函数,您可以像这样调用组合过滤器方法:
var $container = $('#library');
var filters = {};
var comboFilter = getComboFilter( filters );
$container.isotope({ filter: comboFilter });
最后,完全集成到您的文件中将是这样的:
var $container = $('#library');
var filters = {};
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');
var 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;
}
希望这对某人有帮助!该演示非常漂亮。