111

我正在考虑,是否可以在 jQuery 中通过使用 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>

我想选择所有元素,myc="blue"但只有那些myid设置为 1 或 3 的元素。

所以我尝试了:

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

但它不起作用,这里也一样:

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

是否可以不编写特殊的过滤器功能?

4

8 回答 8

217

运算

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

OR操作,使用逗号

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

正如@Vega 评论的那样:

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
于 2012-05-21T14:27:39.127 回答
19

使用多重选择器[docs] (OR)简单地使用.filter() [docs] (AND ):

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

一般来说,链接选择器,就像a.foo.bar[attr=value]是某种 AND 选择器。

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

于 2012-05-21T14:31:03.783 回答
11

写一个像下面这样的过滤器怎么样,

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

编辑: @Jack 谢谢.. 完全错过了..

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

演示

于 2012-05-21T14:27:34.050 回答
6

选择器中的 and 运算符只是一个空字符串,而 or 运算符是逗号。

但是,没有分组或优先级,因此您必须重复其中一个条件:

a=$('[myc=blue][myid="1"],[myc=blue][myid="3"]');
于 2012-05-21T14:29:41.117 回答
5

先找出所有情况下出现的条件,然后过滤特殊条件:

$('[myc="blue"]')
    .filter('[myid="1"],[myid="3"]');
于 2012-05-21T14:33:12.713 回答
1

在您的特殊情况下,它将是

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
于 2012-05-21T14:30:35.327 回答
0

JQuery 使用 CSS 选择器来选择元素,因此您只需使用多个规则,用逗号分隔它们,如下所示:

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

编辑:

抱歉,你想要蓝色和 1 或 3。怎么样:

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

将两个属性选择器放在一起给出 AND,使用逗号给出 OR。

于 2012-05-21T14:27:39.507 回答
-1

要使用您所说的逻辑操作正确选择元素,您只需要jQuery.filter()操作AND,而不是“特殊过滤器功能”。您还需要jQuery.add()进行OR操作。

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

或者,可以在单个选择器中使用速记来完成,其中干扰选择器一起充当 an AND,用逗号分隔充当OR

var elements = $('[myc="blue"][myid="1"], [myid="3"]');
于 2012-05-21T14:28:26.413 回答