jQuery选择器:当存在多个类时选择某个类的组合

我已经尝试过做一些研究但没找到任何东西,但如果我错过了答案,请告诉我。 基本上我有多个元素,每个元素有多个类,但组合是唯一的。 我想选择某种类的组合,但不要选择其他元素与其他元素结合使用。

我想知道这个选择器是否存在于jQuery中,或者是否有其他方法可以实现我正在解释的内容。 请参阅以下示例:

/div>

当尝试仅记录具有类abc的元素时,我尝试使用:

 $('.abc').each( function() { console.log($(this)); } 

输出是:

 [ 
...
,
...</div ,
...
]

我正在寻找输出:

 [ 
...
]

任何指导表示赞赏。 谢谢!

您可以使用CSS3 :not()伪类来否定.d类:( 示例)

 $('.abc:not(.d)').each( function() { console.log($(this)); }); 

jQuery也有一个.not()方法 🙁 示例)

 $('.abc').not('.d').each( function() { console.log($(this)); }); 

您还可以使用属性选择器:( 示例)

 [class="abc"] 

请注意,订单始终必须为abc 。 把它扔掉那里作为一种选择。

我不相信你可以用直接的CSS选择器做到这一点,缺少使用:不要枚举你想要排除的所有其他课程或者[class =]的一些真正的体操。 但是,您可以使用.abc类选择所有元素,然后过滤掉类列表中包含三个以上元素的所有元素:

 var $abcDivs = $('.abc').filter(function(i, $elem){ return $elem.attr("class").split(' ').length == 3; }) 

更普遍:

 function exactClass(classList) { return $(classList.join('.')).filter(function(i, $elem){ return $elem.attr("class").split(' ').length == classList.length; }); } 

我一直在寻找类似的东西,但我无法猜出我不需要的类(因为它们是动态附加的)。 因此,我not()not()排除不需要的类,而是将其与仅我知道的类匹配。

 var classes = ['a','c','b']; $('.'+classes.join('.')).each( function(){ var cl = $(this).attr('class'); for(var i in classes) { cl = cl.split(classes[i]).join(''); } if(cl.replace(/\s+/, '') === ''){ $(this).addClass('blah'); } }); 
 .blah{ font-size:30px; color : red; } 
  
Foo
Bar
Hello
World