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

给出以下XML:

 Max Jen Kim Bob Jon Jim Joy Amy  

使用jQuery,有没有办法选择男性用户,来自CA或NV,但不使用过滤function? 要清楚,我知道

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

只选择男性用户

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

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

但是,使用filterfunction可以起到以下作用:

 $(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),并且每个状态重复一次(这将是你的逻辑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 

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

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