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

76

我有这行代码:

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

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

我得到"false"而非其他元素,推测问题出在:

.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');


});

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

5个回答

128
使用 not 函数代替:
var lastOpenSite = $(this).siblings().not('.closedTab');

hasClass 只检测一个元素是否有指定的类,not 会从所选元素组中删除匹配提供选择器的元素。


115

按照以下方式更容易实现:

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

在条件前面加上 ! 表示 false,在大多数编程语言中都适用。


这不适用于OP尝试做的事情。它只是测试#foo是否有一个类,而不是将匹配元素集减少为具有它的那些元素。 - James Allardice
6
这种方法在我完全不同的情况下也很有效。谢谢。 - Rich Finelli
我做错的事情就是在括号中加上感叹号 !($(this).hasClass()),这样不起作用。 - Galzor

7
jQuery的hasClass()方法返回一个布尔值(true/false),而不是一个元素。此外,传递给它的参数是类名,而不是选择器。
例如:x.hasClass('error');

4
您也可以使用jQuery的is(selector)方法:(链接)
var lastOpenSite = $(this).siblings().is(':not(.closedTab)');

3

我不知道在原始发布时是否如此,但是siblings方法允许选择器,因此应该可以减少OP列出的内容。

 $(this).siblings(':not(.closedTab)');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接