jQuery使用AND和OR运算符按属性选择

jQuery使用AND和OR运算符按属性选择,jquery,jquery-selectors,find,operators,Jquery,Jquery Selectors,Find,Operators,我在考虑,在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> 但它不起作用,这里也一样: a=$('[myc="blue"] &&am

我在考虑,在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>
但它不起作用,这里也一样:

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

是否可以不编写特殊的过滤器函数?

编写如下过滤器如何

$('[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');
});

和操作

a=$('[myc="blue"][myid="1"][myid="3"]');
操作时,请使用逗号

a=$('[myc="blue"],[myid="1"],[myid="3"]');
正如@Vega所评论的:

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

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

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

对不起,你想要蓝色和1或3。那么:

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

将两个属性选择器放在一起,使用逗号可以得到或。

要使用前面所述的逻辑操作正确地选择元素,只需对
操作使用
jQuery.filter()
,而不是“特殊筛选函数”。对于
操作,还需要
jQuery.add()

var elements = $('[myc="blue"]').filter('[myid="1"').add('[myid="3"');
或者,也可以在单个选择器中使用速记,将选择器组合在一起作为
,用逗号分隔作为

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

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

但是,没有分组或优先级,因此必须重复以下条件之一:

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

在你的特殊情况下

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
简单使用(和)使用(或):

通常,链接选择器,如
a.foo.bar[attr=value]
是一种AND选择器


jQuery提供了有关支持的选择器的信息,值得一读。

首先查找所有情况下出现的条件,然后筛选特殊条件:

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

我想,他想要的是
myc==blue&&(id==1 | | id==3)
如果我使用
a=$('[myc=“blue”][myid=“1”],[myid=“3”]”)
是指
([myc=“blue”]和[myid=“1”])或[myid=“3”]
([myc=“blue”])和([myid=“1”]或[myid=“3”])
我在找第二个//编辑:谢谢你的更新!:-)我想,他想要的是
myc==blue&&(id==1 | | id==3)
你需要重复第二个例子中的
[myc=“blue”]
选择器。注意:你不应该像
myc
myid
那样构建自己的属性。如果您使用HTML5在它们前面加上
数据-
数据myc
数据myid
@RoToRa,HTML5中是否有文档说明您应该这样做?我看到的大多数网站都会使用开发者大脑当时想的任何东西……仅仅因为人们这么做,并不意味着它是正确的。请参阅:“作者不得使用本规范或其他适用规范不允许使用的元素、属性或属性值,因为这样做会使语言在未来的扩展变得非常困难。”这是一个很好的问题的糟糕例子。不同的元素类型,比如输入,你需要这些引号吗?我的意思是为了一致性。。可能只有我一个人@维加:像
blue
这样的简单字符串不需要引号,但我不确定数值,所以我保留了它们。你知道吗,这比gabe的答案快吗?我不知道,也许,也许不是。