【问题标题】:How do I combine logical OR with logical AND within a jQuery attribute selector?如何在 jQuery 属性选择器中将逻辑 OR 与逻辑 AND 结合起来?
【发布时间】:2011-05-23 05:51:22
【问题描述】:

给定以下 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());
});

谢谢!

【问题讨论】:

    标签: javascript jquery attributes jquery-selectors


    【解决方案1】:

    试试这个:

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

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

    测试:

    $(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
    

    【讨论】:

    • 它会重复,但就单独使用选择器而言,就是这样。请务必单击复选标记以接受您最喜欢的答案。
    • 有没有办法使用NOT运算符?
    【解决方案2】:

    您可以组合多个选择器,但您的语法并不完全正确:

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

    这会找到状态为“CA”的所有 元素和状态为“NV”的任何其他节点(不一定是 )。你想要的是:

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

    如果你不想重复自己:

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

    【讨论】:

    • 感谢您对语法的澄清。我没有意识到这一点。
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2011-06-19
    • 2017-08-05
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多