【问题标题】:Isotope filtering callback - how to target when multiple containers have same class同位素过滤回调 - 当多个容器具有相同的类时如何定位
【发布时间】:2014-07-04 16:16:44
【问题描述】:

我正在使用同位素进行过滤。它工作正常。但是,我遇到了回调函数的问题,这可能只是一个基本的 jquery 问题,而不是同位素问题。

我在同一页面上有多个同位素容器,每个容器都有相同的类('.products')。它们必须分成不同的容器,因为有不同的部分,并且它们必须具有相同的类(容器是在 wordpress 中动态创建的)。它们都由同一组过滤器控制。所有这一切都很好。但是,我现在想在特定的过滤器组合没有结果时添加“未找到结果”消息。

我在每个容器的开头添加了一个“.noresults”项目,透明度为:0。然后,如果它的容器没有其他项目,我尝试显示 '.noresults' div。像这样:

$container = $('.products');

$container.isotope({ 
    filter: comboFilter,
    onLayout: function() {
         if ( $('.products').length < 2 ) { 
             $(this).find('.noresults').addClass('showme'); 
         } else {
             $(this).find('.noresults').removeClass('showme');
         }
    }
});

不幸的是,它显示了所有 .noresults 项目,而不仅仅是 .products 容器中的那个是空的。因此,一旦任何容器为空,它就会将该类添加到所有 .noresults div。

如何仅定位空容器中的 .noresults div?

更新:我用下面第一个答案中的代码做了一个代码笔,所以你可以看到发生了什么:http://codepen.io/anon/pen/lKuxa

【问题讨论】:

    标签: javascript jquery wordpress filter jquery-isotope


    【解决方案1】:

    $('.products').length 表示匹配结果的数量。它将始终返回文档中 .products 容器的编号。您应该改用 $(this).children().length 作为条件。尝试这样实现:

    onLayout: function($ele){
        var $this = $(this),visibleItemNum = $this.children().length - $this.children("[class*=isotope-hidden]").length;  //container reference
    
        if(visibleItemNum<3){
            $this.find(".noresults").addClass("showme");
        }else{
            $this.find(".noresults").removeClass("showme");
        }
    }
    

    【讨论】:

    • 感谢您的帮助。不幸的是,这也不太奏效。我用你的代码做了一个codepen,如果你想看看发生了什么? codepen.io/anon/pen/lKuxa(出于测试目的,我将“未找到结果”的不透明度设为 0.1 而不是 0。)
    • 请注意,同位素项目在过滤后不会从容器中移除。因此,您需要使用 [class*=isotope-hidden] 选择器获取过滤后的项目。此外,您需要确保无法过滤掉空指标项'.noresult',这意味着您必须为其分配所有类型类。这是工作的code pen
    • 谢谢!这对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2016-01-14
    • 2018-04-04
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多