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


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

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

Я получаю "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 64

5 ответов:

использовать not функция:

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

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

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

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

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

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

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

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

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

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

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