gpt4 book ai didi

jquery - Metafizzy 的同位素 - 如果没有组合结果,则停用过滤器

转载 作者:行者123 更新时间:2023-12-01 06:47:27 25 4
gpt4 key购买 nike

我正在使用metafizy'同位素来过滤项目。

我有 2 个过滤器行:类别1(电缆、工具、东西1、东西2)和类别2(电缆1,电缆2,工具1,工具2)。

如果组合两个类别时没有结果,是否可以停用过滤器(使用 CSS,例如灰显)?

示例:我单击过滤器“stuff2”,在类别 2 中没有匹配的项目,因此 jQuery 向类别 2 添加一个类,就像将它们灰显一样。

我的同位素代码:

jQuery.noConflict();
(function($){
var $container = $('#container'),
filters = {};

$container.isotope({
itemSelector : '.element',
{mfilterscript}
{mfilterscript2}
});

// filter buttons
$('.filter a').click(function(){
var $this = $(this);
// don't proceed if already selected
if ( $this.hasClass('selected') ) {
return;
}

var $optionSet = $this.parents('.option-set');
// change selected class
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');

// store filter value in object
// i.e. filters.color = 'red'
var group = $optionSet.attr('data-filter-group');
filters[ group ] = $this.attr('data-filter-value');
// convert object into array
var isoFilters = [];
for ( var prop in filters ) {
isoFilters.push( filters[ prop ] )
}
var selector = isoFilters.join('');
$container.isotope({ filter: selector });

return false;
});

})(jQuery);

最佳答案

这绝对是可能的。

你需要做几件事

1) 检查过滤器数组的长度以了解 future 所​​有可能的过滤器组合

例如,假设您有一个水果列表,所有水果都有一个“水果”类和一个水果类型“苹果”、“梨”、“橙子”等类。

你会做这样的事情:

    $('a.fruit').each(function() {
var $this = $(this);
var getVal = $this.attr('data-filter-value');
var numItems = $('img'+getVal+':not(.isotope-hidden)').length; // <-- This example is for filtering img tags but just replace it with whatever element you're actually filtering
if(!$(this).hasClass('active') && !$that.hasClass('fruit') ){ // <-- i.e. it's a fruit that has not already disabled by previous filter combinations
if(numItems === 0){
$this.addClass('disabled');
}
else {
$this.removeClass('disabled');
}
}
else if( $this.hasClass('active') && $this.hasClass('disabled') ){
$this.removeClass('disabled');
}
else if(!$(this).hasClass('active') ) {
if(numItems > 0){
$this.removeClass('disabled');
}
}
});

2) 您将需要添加一些代码来处理禁用的过滤器,以便它们无法被触发。执行此操作的最佳位置是靠近过滤例程的顶部。 IE。在处理任何过滤之前,您想要退出例程。

有很多方法可以做到这一点(例如,e.preventDefaults,但在这种情况下,返回 false 可能更安全,因此我们不必担心之后重新绑定(bind)默认行为)。

例如,您可能会这样做:

    $('.filter a').click(function(){
// exit directly if filter already disabled
if ($(this).hasClass('disabled') ){
return false;
} else if ($(this).hasClass('selected') ) {
return false;
}

...

}); // close routine

Here's a live example of everything working

这是所有 JavaScript对于这个例子。

希望有帮助!

关于jquery - Metafizzy 的同位素 - 如果没有组合结果,则停用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092062/

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