Подтвердить что ты не робот

Как использовать в jQuery: not и hasClass() для получения определенного элемента без класса

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

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


});

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

4b9b3361

Ответ 1

Вместо этого используйте not:

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

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

Ответ 2

Это гораздо проще сделать следующим образом:

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

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

Ответ 3

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

Для ex: x.hasClass('error');

Ответ 5

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

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