gpt4 book ai didi

jquery - 将过滤元素与同位素组合

转载 作者:行者123 更新时间:2023-12-01 00:36:43 25 4
gpt4 key购买 nike

我目前正在使用同位素来过滤出版物列表,但希望能够将标准的、记录的链接过滤器方法与选择元素结合起来,因为我的第二个过滤器列表相当长。

我正在努力解决的问题是处理两种不同类型的元素,并将选定的值组合一个选项数组中。我可以使过滤器彼此独立工作(代码如下),但它们需要协同工作。如何将两个不同的操作(单击或更改)和两个属性(class= 或 value=)组合到一个选项数组中以传递给同位素过滤器?

    var $container = $('#library');
// select ccskills publications by default
$container.isotope({ filter: '.ccskills' });

var $optionSets = $('#library-options .option-set'),
$optionLinks = $optionSets.find('a');

$optionLinks.click(function(){
var $this = $(this);
// don't proceed if already selected
if ( $this.hasClass('selected') ) {
return false;
}
var $optionSet = $this.parents('.option-set');
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');

// make option object dynamically, i.e. { filter: '.my-filter-class' }
var options = {},
key = $optionSet.attr('data-option-key'),
value = $this.attr('data-option-value');

// parse 'false' as false boolean
value = value === 'false' ? false : value;
options[ key ] = value;
$container.isotope( options );
return false;
});

// using the 'chozen' plugin to style my select element
$(".chzn-select").chosen().change(
function() {
var industry = $("option:selected", this).val();
$container.isotope({filter: industry});
}
);

最佳答案

您需要一个多维数组,其中每个过滤器类型都有一个数组维度。我之前已经这样做过,并且有一个现场演示示例 here !

参见here !对于js。

编辑(2020 年 2 月):演示和 JavaScript 的链接已更新为 2020 年,包含回溯机器 URL

在我的 js 文件中,您会对名为 getComboFilters(filters) 的最终函数感兴趣

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;
}

希望这对某人有帮助!该演示非常流畅。

关于jquery - 将过滤元素与同位素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com