Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery属性选择器中组合逻辑OR和逻辑AND?_Javascript_Jquery_Attributes_Jquery Selectors - Fatal编程技术网

Javascript 如何在jQuery属性选择器中组合逻辑OR和逻辑AND?

Javascript 如何在jQuery属性选择器中组合逻辑OR和逻辑AND?,javascript,jquery,attributes,jquery-selectors,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=

给定以下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>
仅选择男性用户,而

$(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']")
基本上,您可以在一个简单的选择器中将
sex
state
属性链接在一起(这将是您的逻辑and),并在每个状态下重复它们一次(这将是您的逻辑OR)

测试:

输出:

Max - CA
Bob - NV
Jon - CA

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

$(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']");

感谢您对语法的澄清。我没有意识到这一点。它变得重复,但就单独使用选择器而言,就是这样。确保单击复选标记以接受您最喜欢的答案。是否有方法使用NOT运算符?
$(xml).find("user[state=CA][sex=m],user[state=NV][sex=m]")
$(xml).find("user").filter("[state='CA'],[state='NV']").filter("[sex='m']");