在jQuery中选择具有多个类的元素

时间:2014-08-13 01:25:28

标签: jquery jquery-selectors traversal

我想选择一个有几个类的元素

像这样的HTML:

<div class="myclass fclass sclass tclass"></div>
<div class="myclass tclass"></div>
<div class="myclass sclass tclass"></div>
<div class="myclass fclass tclass"></div>
<div class="myclass fclass sclass tclass"></div>

我只想选择myclass tclass类的元素。

我真的不想这样做,我必须知道每个班级,如:

$(".myclass.tclass").not(".fclass, .sclass")

1 个答案:

答案 0 :(得分:2)

作为具有命名函数的回调可能无法正常工作(如果您需要使用不同的类类型),但演示显示它有效:

$('.myclass.tclass').filter(match_exact_class);

function match_exact_class() {
    return $(this).attr('class').split(/\s+/).length == 2;
}

http://jsfiddle.net/userdude/9bc4qjn4/1

作为一个电话:

$('.myclass.tclass').filter(function match_exact_class() {
    return $(this).attr('class').split(/\s+/).length == 2;
});

$('.myclass.tclass.sclass').filter(function match_exact_class() {
    return $(this).attr('class').split(/\s+/).length == 3;
});

$('.myclass.tclass.tclass.sclass').filter(function match_exact_class() {
    return $(this).attr('class').split(/\s+/).length == 4;
});

我怀疑你可以滚动一个简单的插件或自定义选择器,然后拆分选择器,如:

var selector = '.myclass.tclass.tclass.sclass',
    sel_match = selector.split('.').length;

$(selector).filter(function match_exact_class() {
    return $(this).attr('class').split(/\s+/).length == sel_match;
});

简单的自定义选择器:

jQuery.extend(jQuery.expr[':'], {
    matcls: function(elem, i, match){
        return elem.className.split(/\s+/).length == match[3].split(/\s+/).length;
    }
});

console.log($('div:matcls("myclass tclass")'));

http://jsfiddle.net/userdude/9bc4qjn4/4