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