jQuery:是否有可能从元素中选择只有一个类的元素,最多可能有3个类?

时间:2011-12-14 21:45:47

标签: javascript jquery jquery-selectors

例如,假设我有以下内容:

<span class="a b c">Has class a, b, and c</span>  
<span class="a">Has class a</span>  
<span class="b c">Has class b and c</span> 
<span class="a c">Has class a and c</span> 
<span class="a c">Has class a and c</span> 
<span class="a">Has class a</span>

现在,假设我要选择所有类a的元素 意思是只选择第二个和最后一个span s 有一种简单的方法可以做到这一点吗?

5 个答案:

答案 0 :(得分:34)

$('.a').not('.b, .c')

这将选择课程a中没有bc的所有元素。但是,他们仍然可以使用课程de等。如果您真的只想要除a以外的其他课程的元素,请使用Phil的答案。

答案 1 :(得分:9)

(请参阅下文,了解您可能不想完全按照问题提出的要求)

您可以使用[class="a"]“属性等于选择器”,尽管它很脆弱:

$('span[class="a"]').hide();

问题是如果你的class属性中有任何空格,那么它就会破坏。看到这个小提琴:http://jsfiddle.net/c7DP7/

您可以通过使用普通类选择器对这些项执行基本查询来解决此问题,然后在仅检查a时进一步过滤它们(并在第二个过滤器中修剪空白)。看到这个小提琴:http://jsfiddle.net/uD48E/1/

$('.a')
    .filter(function(index){
        return $(this).attr("class").trim() == "a";
    })
    .hide();

问题似乎是试图制作更多“面向未来”的代码,但这种具体方法更加脆弱。拒绝与您正在过滤的当前类无关的所有类可能会因为与类a无关的原因而破坏事物(如添加的不相关的类de后来)。如果您将应用jQuery的HTML将来可能会更改,这一点非常重要。

更好的方法是过滤掉影响类a含义的类。允许这种灵活性实际上使您的代码更具有前瞻性。请参阅maxedison's answer了解最佳方法。

答案 2 :(得分:4)

我想如果你想这样做,你可以这样做:

var spans = $("span[class='a']");

答案 3 :(得分:1)

另一种方法是删除这些类,然后检查是否还有任何类。如果不是,请执行以下功能:

JS Fiddle

$('.a').each(function () {
    var $this = $(this);
    if (!$this.removeClass('a').attr('class').length) {
       //Execute function here
    }
});

答案 4 :(得分:0)

使用这个:

jQuery:

$('[class="a"]');

JavaScript:

document.querySelectorAll("[class='a']");