Message original: Pourquoi ce script simple ne fonctionne-t-il pas?
if ($('#navigation > ul > li > ul > li > a').hasClass('.active')) {
$(this).parent().parent().parent().addClass(".active");
}
MODIFIER:
Cela ne cachera pas le H1:
if ($('#content h1').hasClass('aktiv')) {
$(this).hide();
}
Seulement ceci:
if ($('#content h1').hasClass('aktiv')) {
$('#content h1').hide();
}
Pourquoi ne puis-je pas utiliser le (ceci)?
Le point ne fait pas partie du nom de la classe. Il n'est utilisé que dans la notation de sélecteur CSS/jQuery. Essayez ceci à la place:
if ($('#navigation a').hasClass('active')) {
$(this).parent().addClass('active');
}
Si $(this)
fait référence à cette ancre, vous devez également la remplacer par $('#navigation a')
car la condition if n'a pas de portée de rappel jQuery.
Sinon, vous pouvez utiliser:
if ($('#navigation a').is(".active")) {
$(this).parent().addClass("active");
}
Vous ne pouvez pas utiliser $(this)
car jQuery ne sait pas ce que c'est. Vous semblez trop compliquer les choses. Vous pouvez faire $('#content h1.aktiv').hide()
. Il n'y a aucune raison de tester pour voir si la classe existe.
La raison pour laquelle cela ne fonctionne pas, c'est parce que this
n'a pas de signification particulière dans une instruction if; vous devrez revenir à un niveau de portée où this
est défini (une fonction).
Par exemple:
$('#element1').click(function() {
console.log($(this).attr('id')); // logs "element1"
if ($('#element2').hasClass('class')) {
console.log($(this).attr('id')); // still logs "element1"
}
});
Vous voulez probablement changer la condition en if ($(this).hasClass('active'))
De plus, hasClass
et addClass
prennent classnames , pas les sélecteurs.
Par conséquent, vous ne devriez pas inclure un .
.
Si quelqu'un utilise WordPress, vous pouvez utiliser quelque chose comme:
if (jQuery('.dropdown-menu li').hasClass('active')) {
jQuery('.current-menu-parent').addClass('current-menu-item');
}