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
类没有b
或c
所有元素。 然而,他们仍然可以有d
, e
等等。如果你真的只想要除了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
无关的原因而破坏事物(就像之后添加的不相关的类d
或e
)。 如果您将应用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 } });