Как использовать в jQuery: not и hasClass (), чтобы получить определенный элемент без класса - PullRequest
67 голосов
/ 05 января 2012

У меня есть эта строка кода:

$('#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');


});

Это лучший способ?спасибо, Алон

Ответы [ 5 ]

108 голосов
/ 05 января 2012

Вместо этого используйте функцию not:

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

hasClass только проверяет, имеет ли элемент класс, not удалит элементы из выбранного набора, соответствующиепредоставленный селектор.

87 голосов
/ 18 июля 2012

Гораздо проще сделать так:

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

The!перед критериями означает ложь, работает на большинстве языков программирования.

7 голосов
/ 05 января 2012

Метод jQuery hasClass() возвращает логическое значение (true / false), а не элемент.Кроме того, параметр, который должен быть передан ему, это имя класса, а не селектор как таковой.

Например: x.hasClass('error');

3 голосов
/ 03 декабря 2014

Вы также можете использовать jQuery - is (селектор) Метод :

var lastOpenSite = $(this).siblings().is(':not(.closedTab)');
2 голосов
/ 23 февраля 2016

Я не знаю, было ли это так во время первоначальной публикации, но метод братьев и сестер допускает селекторы, так что сокращение того, что указано в OP, должно работать.

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