Ответ 1
Вместо этого используйте not
:
var lastOpenSite = $(this).siblings().not('.closedTab');
hasClass
проверяет, имеет ли элемент класс, not
удалит элементы из выбранного набора, соответствующие предоставленному селектору.
У меня есть эта строка кода:
$('#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');
});
Это лучший способ? благодаря, Алон
Вместо этого используйте not
:
var lastOpenSite = $(this).siblings().not('.closedTab');
hasClass
проверяет, имеет ли элемент класс, not
удалит элементы из выбранного набора, соответствующие предоставленному селектору.
Это гораздо проще сделать следующим образом:
if(!$('#foo').hasClass('bar')) {
...
}
The! перед критерием означает false, работает на большинстве языков программирования.
jQuery hasClass()
метод возвращает логическое значение (true/false), а не элемент. Кроме того, параметр, который должен быть присвоен ему, - это имя класса, а не селектор как таковой.
Для ex: x.hasClass('error');
Вы также можете использовать jQuery - это (селектор) Метод:
var lastOpenSite = $(this).siblings().is(':not(.closedTab)');
Я не знаю, было ли это истинно во время первоначальной публикации, но метод братьев и сестер позволяет селекторам, поэтому сокращение того, что должно быть в списке OP, должно работать.
$(this).siblings(':not(.closedTab)');