jquery - 复合 JQuery 选择器

标签 jquery jquery-selectors

我有一个页面,其中包含多个多选下拉菜单。每个菜单都有一个通用类别,例如:

Box1: Fruits         Box2: Veggies
 - Peach              - Celery
 - Orange             - Broccoli
 - Apple              - Spinach

页面上的对象最多包含每个下拉列表中的一个类。

当从下拉列表中选择一个类时,这些对象将根据所选类进行过滤,并且仅显示包含该类的对象。例如,如果您从第一个下拉列表中选择“桃子”,则所有苹果和橙子都将被隐藏。 (.桃子)

由于您可以从下拉列表中选择多个项目,因此您还可以选择“Apple”,从而显示“Apple”和“Peach”对象,但不显示橙子。 (.桃子,.苹果)

或者,您可以选择其中一种蔬菜,它只会显示同时包含这两种蔬菜的对象。 (.桃子.菠菜)

我遇到的问题是,我不知道如何扩展它,以便我可以得到像“对象是((苹果或桃子)和(菠菜或西兰花))”这样复杂的东西,我认识到我可以做(.apple.spinach,.apple.broccoli,.peach.spinach,.peach.broccoli)但是这似乎最终会变得不必要的复杂,特别是当菜单的大小,菜单的数量和数量时所选选项的数量不断增加(我在示例中简化为两个)。

我尝试了多种方法来解决这个问题,例如:

//:has() does not appear to be useable in this fashion
(:has(.peach, .apple):has(.spinach, .broccoli)) 

//multiple selectors within brackets[] doesn't appear to be supported
([class~='apple', class~='peach'][class~='spinach', class~='broccoli'])

//grouping OR sets doesn't appear to help:
((.peach, .apple)(.spinach, .broccoli))

是否有一些简单的方法可以做到这一点,但我错过了或搞砸了?或者我是否被迫创建一些重循环来生成所有可能的 AND 组合?

最佳答案

一个multiple selector确实可以用来实现 OR 运算符。要在两个表达式之间实现 AND 运算符,您可以使用 filter() :

// ((Apples OR Peaches) AND (Spinach OR Broccoli))
var matches = $(".peach, .apple").filter(".spinach, .broccoli");

如果有多个表达式,您可以链接调用 filter():

// ((Apples OR Peaches) AND (Spinach OR Broccoli) AND (Dragon OR Unicorn))
var matches = $(".peach, .apple")
              .filter(".spinach, .broccoli")
              .filter(".dragon, .unicorn");

关于jquery - 复合 JQuery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071351/

相关文章:

Jquery 获取下一个兄弟

javascript - jQuery 选择器 - 奇怪的行为

jQuery :not() selector combined with Attribute Contains selector

jquery - :hover stops after hovering autocomplete field

javascript - 可以使用 jquery 修改 html 字符串吗?

php - 使用 jQuery 显示返回的 JSON 对象

jquery:选择具有给定名称和值的输入

javascript - 制作一个 "Load More"按钮,显示我博客上的另外 2 篇文章

c# - 是否可以计算回发中的按钮点击次数

javascript - 谷歌图表删除带有多个复选框的列