如何在jQuery中使用:not和hasClass()以获取没有类的特定元素


71

我有这行代码:

$('#sitesAccordion .groupOfSites').click(function() {
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)');
    console.log(lastOpenSite);
});

我得到“假”而不是得到其他元素之一(假设有一个-必须存在)。我猜问题出在:

.hasClass(':not(.closedTab)');

问题是什么?

我的目的是创建自己的手风琴(不使用jQuery UI)

我正在尝试这样写:

$('#sitesAccordion .groupOfSites').click(function() {

    //Get the last opened tab
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)');

    //Close last opened tab and add class
    lastOpenSite.hide().toggleClass('closedTab');

    //Open the current Tab
    $(this).children('.accordionContent').toggle('fast');

    // remove class from open tab
    $(this).toggleClass('closedTab');


});

这是最好的方法吗?谢谢,阿隆

Answers:


120

使用not函数代替:

var lastOpenSite = $(this).siblings().not('.closedTab');

hasClass仅测试元素是否具有类,not将从匹配提供的选择器的选定集中删除元素。


哦-那是我犯的一个愚蠢的错误-感谢您的回答!
阿隆2012年

100

这样做很容易:

if(!$('#foo').hasClass('bar')) { 
  ...
}

!在标准前面表示错误,适用于大多数编程语言。


这对于OP尝试执行的操作无效。它只是测试是否#foo具有一个类,它不会将匹配的元素集减少为具有该元素的元素集。
James Allardice

5
在我完全不同的情况下,这种方式效果很好。谢谢。
Rich Finelli 2015年

我做错的就是放!用大括号!($(this).hasClass())不起作用。
Galzor

7

jQuery的hasClass()方法返回一个布尔值(true / false)而不是一个元素。同样,要赋予它的参数是类名,而不是选择器。

例如: x.hasClass('error');



2

我不知道在最初发布时是否如此,但是兄弟姐妹方法允许选择器,因此减少了列出的OP应该可以使用的范围。

 $(this).siblings(':not(.closedTab)');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.