javascript - 如何在 jQuery 属性选择器中将逻辑 OR 与逻辑 AND 结合起来?

标签 javascript jquery attributes jquery-selectors

给定以下 XML:

<users>
    <user state="CA" sex="m">Max</user>
    <user state="AZ" sex="f">Jen</user>
    <user state="OR" sex="f">Kim</user>
    <user state="NV" sex="m">Bob</user>
    <user state="CA" sex="m">Jon</user>
    <user state="AZ" sex="m">Jim</user>
    <user state="OR" sex="f">Joy</user>
    <user state="NV" sex="f">Amy</user>
</users>

使用 jQuery,有没有办法选择来自 CA 或 NV 的男性用户,但不使用过滤器功能?明确地说,我知道

$(xml).find("user[sex='m']")

只选择男性用户,而

$(xml).find("user[state='CA'],[state='NV']")

从 CA 或 NV 选择所有用户。但是我无法在单个选择器中将它们与逻辑 AND 结合起来。

然而,使用过滤器功能,以下工作:

$(xml).find("user").filter(function() {
    return $(this).attr('sex') == 'm' && ($(this).attr('state') == 'CA' || $(this).attr('state') == 'NV')
}).each(function() {
    alert($(this).text());
});

谢谢!

最佳答案

试试这个:

$(xml).find("user[sex='m'][state='CA'], user[sex='m'][state='NV']")

基本上,您将 sexstate 属性链接在一个简单的选择器中(这将是您的逻辑 AND),并为每个状态重复一次(这将成为你的逻辑或)。

测试:

$(xml).find("user[sex='m'][state='CA'], user[sex='m'][state='NV']")
      .each(function() {
          alert($(this).text() + " - " + $(this).attr('state'));
      });

输出:

Max - CA
Bob - NV
Jon - CA

关于javascript - 如何在 jQuery 属性选择器中将逻辑 OR 与逻辑 AND 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404995/

相关文章:

javascript - 在 Firefox 悬停时从中心调整动画大小

jquery - 查找特定元素中有多少个类

c# - Ninject:通过属性进行拦截,而不从 InterceptAttribute 派生

javascript - 如何遍历 GeoJson Feed for Google Map

javascript - 编译为 JavaScript 时,有没有办法在 Haxe 中为类型别名?

jquery - 谷歌日期解析

c# - 我可以使用属性来限制 C# 中接口(interface)方法的使用吗?

.net - 如何使用反射通过属性标签名称设置属性值?

javascript - 转换数据时 obj[i] 在 javascript 中不可迭代

c# - ASP.NET - Comet 将消息从服​​务器推送到所有客户端