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

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

Has class a, b, and c Has class a Has class b and c Has class a and c Has class a and c Has class a 

现在,假设我想选择只有 a类的所有元素。
意味着只选择第二个和最后一个span
有一个简单的方法吗?

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

这将选择a类没有bc所有元素。 然而,他们仍然可以有de等等。如果你真的只想要除了a之外没有类的元素,请使用Phil的答案。

(请参阅下文,了解为什么您可能不想完全按照问题中的要求进行操作)

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

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

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

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

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

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

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

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

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

另一种方法是删除该类,然后检查是否仍有任何类。 如果不是,执行以下function:

JS小提琴

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