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