我需要选择包含多个类的所有元素。不需要考虑类名,只需选择具有两个或更多类的任何元素。
那么这个 jQuery 选择器是什么样子?
我需要选择包含多个类的所有元素。不需要考虑类名,只需选择具有两个或更多类的任何元素。
那么这个 jQuery 选择器是什么样子?
这应该选择具有两个以上类的 所有 元素。
$('*').filter(function() {
return this.className.trim().split(/\s+/).length > 1;
}).foo('bar');
*
更具体的范围。我只是选择了最广泛的范围。 - Blender$('[class*=" "]')
<div class="foo">
。 - BoltClock(function($){
$.expr[':'].classes = function(o,i,m,s){
var c = o.className.match(/\s*(.*)\s*/)[0].split(/\s+/).length;
// Hard [fixed] limit
// :classes(N)
if (/^\d+$/.test(m[3])) {
var n = parseInt(m[3], 10);
return o.className.split(/\s+/).length == n;
}
// Expression:
// :classes(>N) :classes(>=N)
// :classes(>N) :classes(<=N)
else if (/^[<>]=?\d+$/.test(m[3])) {
var e = m[3].match(/^[><]=?/)[0],
n = m[3].match(/\d+$/)[0];
switch (e){
case '<':
return c < n;
case '<=':
return c <= n;
case '>':
return c > n;
case '>=':
return c >= n;
}
}
// Range
// :classes(4-6)
else if (/^\d+\-\d+$/.test(m[3])) {
var ln = parseInt(m[3].match(/^(\d+)/)[0], 10),
hn = parseInt(m[3].match(/(\d+)$/)[0], 10);
return ln <= c && c <= hn;
}
// all else fails
return false;
};
})(jQuery);
更新:现在您可以提供以下选项(将N和M替换为数字),从而增加了一些关于参数的灵活性:
:classes(N)
:classes(<=N)
:classes(<N)
:classes(>=N)
:classes(>N)
:classes(N-M)
$(function(){
var div = $('div[class*=" "]').filter(function(){
var clsArray = $.trim(this.className.split(' ');
return clsArray.length > 1;
});
div.css('background','yellow');
});
它的工作方式就像普通的CSS一样
$('.class1.class2') // will select elements with both classes