J'ai cette ligne de code:
$('#sitesAccordion .groupOfSites').click(function() {
var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)');
console.log(lastOpenSite);
});
Je deviens "faux" au lieu d’obtenir l’un des autres éléments (en supposant qu’il en existe un - et qu’il doit exister). Je suppose que le problème est avec:
.hasClass(':not(.closedTab)');
Quel est le problème?
Mon but est de créer mon propre accordéon (sans utiliser l'interface utilisateur de jQuery)
et j'essaye de l'écrire comme ceci:
$('#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');
});
Est-ce le meilleur moyen? merci Alon
Utilisez plutôt la fonction not
:
var lastOpenSite = $(this).siblings().not('.closedTab');
hasClass
teste uniquement si un élément a une classe. not
supprimera les éléments de l'ensemble sélectionné correspondant au sélecteur fourni.
C'est beaucoup plus facile de faire comme ça:
if(!$('#foo').hasClass('bar')) {
...
}
Le ! devant les critères signifie faux, fonctionne dans la plupart des langages de programmation.
la méthode hasClass()
de jQuery renvoie un booléen (vrai/faux) et non un élément. En outre, le paramètre à lui attribuer est un nom de classe et non un sélecteur en tant que tel.
Par exemple: x.hasClass('error');
Vous pouvez également utiliser la méthode jQuery - is (selector) Method :
var lastOpenSite = $(this).siblings().is(':not(.closedTab)');
Je ne sais pas si cela était vrai au moment de la publication d'origine, mais la méthode des frères et sœurs autorise les sélecteurs. Une réduction de ce que le PO indiqué devrait donc fonctionner.
$(this).siblings(':not(.closedTab)');