jQuery通过使用AND和OR运算符来select属性

我在想,如果有可能在jQuery中select使用AND和OR命名属性的元素。

例:

<div myid="1" myc="blue">1</div> <div myid="2" myc="blue">2</div> <div myid="3" myc="blue">3</div> <div myid="4">4</div> 

我想selectmyc="blue"所有元素,但只有myid设置为1或3的元素。

所以我试了一下:

 a=$('[myc="blue"] [myid="1"] [myid="3"]'); 

但它不起作用,在这里:

 a=$('[myc="blue"] && [myid="1"] || [myid="3"]'); 

有没有写特殊的filterfunction?

AND操作

 a=$('[myc="blue"][myid="1"][myid="3"]'); 

操作,使用逗号

 a=$('[myc="blue"],[myid="1"],[myid="3"]'); 

正如@Vega所评论的:

 a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]'); 

简单的使用.filter() [文档] (AND)使用多重select器 [文档] (或):

 $('[myc="blue"]').filter('[myid="1"],[myid="2"]'); 

通常,链接select器,如a.foo.bar[attr=value]是某种ANDselect器。

jQuery有关于支持的select器的大量文档 ,值得一读。

如何写下面的filter,

 $('[myc="blue"]').filter(function () { return (this.id == '1' || this.id == '3'); }); 

编辑: @杰克谢谢..完全错过了..

 $('[myc="blue"]').filter(function() { var myId = $(this).attr('myid'); return (myId == '1' || myId == '3'); }); 

DEMO

select器中的和运算符只是一个空string,而运算符是逗号。

但是没有分组或优先级,所以你必须重复其中一个条件:

 a=$('[myc=blue][myid="1"],[myc=blue][myid="3"]'); 

首先find所有情况下发生的情况,然后过滤特殊情况:

 $('[myc="blue"]') .filter('[myid="1"],[myid="3"]'); 

在你的特殊情况下,这将是

 a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]'); 

JQuery使用CSSselect器来select元素,所以你只需要使用多个规则,用逗号分隔它们,如下所示:

 a=$('[myc="blue"], [myid="1"], [myid="3"]'); 

编辑:

对不起,你想要蓝色和1或3.怎么样:

 a=$('[myc="blue"][myid="1"], [myid="3"]'); 

把两个属性select器放在一起给你AND,用逗号给你OR。

要正确地select使用你所说的逻辑操作的元素,你只需要jQuery.filter()用于AND操作,而不是“特殊的filter函数”。 您还需要使用jQuery.add()进行OR操作。

 var elements = $('[myc="blue"]').filter('[myid="1"').add('[myid="3"'); 

或者,可以在单个select器中使用简写,其中干扰select器一起充当“ AND并且用逗号分隔充当“ OR

 var elements = $('[myc="blue"][myid="1"], [myid="3"]');