我正在尝试创建一个jQuery选择器,它将执行以下操作:
(.a OR .b OR .c) AND (.x OR .y OR .z)
显然,这不起作用:
$("(.a,.b,.c)(.x,.y,.z)")
我需要在单个选择器中使用它,以便我可以将它用作Isotope插件中的过滤器。 http://isotope.metafizzy.co/docs/filtering.html
以下是我想要实现的示例:http://isotope.metafizzy.co/demos/combination-filters.html,只有我希望能够选择红色和蓝色。这可能吗?
谢谢!
答案 0 :(得分:4)
通过展开AND
(它基本上是Cartesian product),这相当于:
.a.x OR .a.y OR .a.z OR .b.x OR .b.y OR .b.z OR .c.x OR .c.y OR .c.z
所以只需用OR
替换,
s,你就有了一个选择器:
$('.a.x, .a.y, .a.z, .b.x, .b.y, .b.z, .c.x, .c.y, .c.z')
答案 1 :(得分:1)
您可以使用:not()
使用De Morgan's laws进行此操作(即,不使用扩展逻辑公式,而是使用双重否定将AND转换为OR):
:not(:not(.a, .b, .c), :not(.x, .y, .z))
jsFiddle的工作示例。我正在应用的转换是:
a AND b ==> not(not(a AND b))
==> not((not a) OR (not b))
答案 2 :(得分:0)
您可以创建一个返回字符串
的表达式DEMO:http://jsfiddle.net/sq4xF/
var parents=['a','b','c']
var kids=['c','d','e']
var selector=[];
for ( i=0; i<parents.length; i++){
var sel='.'+parents[i] ;
for (j=0; j<kids.length; j++){
selector.push( sel+"."+kids[j]); /* add space if kids are desecendents, "AND" was not clear in question*/
}
}
$("'"+ selector.join()+"'").css('color','red')