jQuery选择器帮助 - 或者,和

时间:2012-06-28 04:00:48

标签: jquery jquery-selectors jquery-isotope

我正在尝试创建一个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,只有我希望能够选择红色和蓝色。这可能吗?

谢谢!

3 个答案:

答案 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')