【问题标题】:jQuery/Isotope complex AND/OR filteringjQuery/同位素复合物 AND/OR 过滤
【发布时间】:2014-04-18 16:05:13
【问题描述】:

我有一个带有许多参数的元素的同位素实例,例如:

<element data-a="1 2 3 4 5" data-b="1 2 3 4 5" data-c="1 2 3 4 5"

当我想显示一个 A1、B2 和 C3 元素时,它是简单的过滤器:

.isotope({ filter: '[data-a~=1][data-b~=2][data-c~=3]' });

但是,我需要更复杂的过滤器,例如 (A1 or 2 or 3) AND (B1 or 2 or 3 or 4) AND C1

AFAIK 无法在 CSS 选择器中执行“OR”,例如:

.isotope({ filter: '[data-a~=1 OR 2 OR 3][data-b~=1 OR 2 OR 3 OR 4][data-c~=1]' });

如何应用如此复杂的过滤器?

【问题讨论】:

    标签: javascript jquery jquery-selectors jquery-isotope


    【解决方案1】:

    Isotope 使用 jQuery 选择引擎,采用 CSS3 选择语法。

    我相信这就是您正在寻找的:

    .isotope({ filter: '[data-a~=1], [data-a~=2], [data-a~=3]' });
    

    此过滤器选择器匹配所有具有属性 data-a 包含值 1、2、OR 3 的元素

    创建更复杂的语句你的最后一个语句可以通过结合这两种方法来完成,以下是未经测试的“最佳猜测”

    .isotope({ filter: '[data-a~=1][data-b~=1][data-c~=1], [data-a~=1][data-b~=2][data-c~=1], [data-a~=1][data-b~=3][data-c~=1], [data-a~=1][data-b~=4][data-c~=1], [data-a~=2][data-b~=1][data-c~=1], [data-a~=2][data-b~=2][data-c~=1], [data-a~=2][data-b~=3][data-c~=1], [data-a~=2][data-b~=4][data-c~=1], [data-a~=3][data-b~=1][data-c~=1], [data-a~=3][data-b~=2][data-c~=1], [data-a~=3][data-b~=3][data-c~=1], [data-a~=3][data-b~=4][data-c~=1]' });
    

    我所做的只是将您的“OR”“分配”到 Selector 语法中。

    希望这会有所帮助!

    【讨论】:

    • 谢谢 - 这工作!我已经嵌套了迭代循环来生成过滤器语句。但是,它不是很干净,而且绝对不是有效的解决方案。我在 A 中有约 30 个类别,在 B 中有约 15 个类别,在 C 中有约 10 个类别。因此,如果选择了所有内容,则查询包含大约 30 * 15 * 10 = 4500 个部分(!!)。那是暂停浏览器一段时间...选择一半选项=相同。有没有更有效的解决方案?案例背景:有一个包含 250 个元素的数据库,以砖石网格显示,具有 3 个参数(30 个类别、15 个区域和约 10 个标签)。我需要在前端对其进行排序。
    • 有更好的方法,但它们与您关于如何将 OR 与同位素过滤器选择器一起使用的具体问题无关。如果您认为我的回答直接回答了这个问题,您可以将其标记为正确吗?谢谢!
    • 我要尝试的第一件事是使用类而不是数据选择器。添加具有非常具体信息的类,例如row4circularThings,并使用相同的选择原则:.isotope({ filter: '.circularThings.row4' });。众所周知,按数据属性进行选择的速度很慢。见this other stackoverflow post。还有许多其他策略。如果您需要更多帮助,请告诉我!
    • 不同位素,作为一个jQuery插件,使用jQuery的选择器引擎吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多