Javascript 如何在jQuery属性选择器中组合逻辑OR和逻辑AND?
给定以下XML: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=
<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']");