例如,假设我有以下内容:
<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
有一种简单的方法可以做到这一点吗?
答案 0 :(得分:34)
$('.a').not('.b, .c')
这将选择课程a
中没有b
或c
的所有元素。但是,他们仍然可以使用课程d
,e
等。如果您真的只想要除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
无关的原因而破坏事物(如添加的不相关的类d
或e
后来)。如果您将应用jQuery的HTML将来可能会更改,这一点非常重要。
更好的方法是过滤掉影响类a
含义的类。允许这种灵活性实际上使您的代码更具有前瞻性。请参阅maxedison's answer了解最佳方法。
答案 2 :(得分:4)
我想如果你想这样做,你可以这样做:
var spans = $("span[class='a']");
答案 3 :(得分:1)
另一种方法是删除这些类,然后检查是否还有任何类。如果不是,请执行以下功能:
$('.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']");