2010-11-17 4 views
6

Message original: Pourquoi ce simple script ne fonctionne-t-il pas?Si hasClass puis addClass au parent

if ($('#navigation > ul > li > ul > li > a').hasClass('.active')) { 
    $(this).parent().parent().parent().addClass(".active"); 
} 

EDIT:

Cela ne cache pas le H1:

if ($('#content h1').hasClass('aktiv')) { 
    $(this).hide(); 
} 

Seulement ceci:

if ($('#content h1').hasClass('aktiv')) { 
    $('#content h1').hide(); 
} 

Pourquoi ne puis-je utiliser (ce)?

Répondre

24

Le point ne fait pas partie du nom de la classe. Il est seulement utilisé dans la notation du sélecteur CSS/jQuery. Essayez ceci:

if ($('#navigation a').hasClass('active')) { 
    $(this).parent().addClass('active'); 
} 

Si $(this) fait référence à ce point d'ancrage, vous devez changer à $('#navigation a') ainsi que la condition if ne pas jQuery portée de rappel.

0

Vous voulez probablement changer la condition de if ($(this).hasClass('active'))

En outre, hasClass et addClass prendre classnames, non sélecteurs. Par conséquent, vous ne devez pas inclure de code ..

+0

j'ai eu des problèmes avec mon (ce) ... se demander pourquoi ... –

2

Sinon, vous pouvez utiliser:

if ($('#navigation a').is(".active")) { 
    $(this).parent().addClass("active"); 
} 
+0

+ 1 pour 'is()', mais 'addClass()' doit toujours supprimer le point. – BoltClock

+0

Ah bon endroit, je vais faire le changement –

+0

Ahh .. Je ne savais pas à ce sujet. Voir mon post édité. –

0

Vous ne pouvez pas utiliser $(this) depuis jQuery ne sait pas ce qu'il est là. Vous semblez compliquer les choses. Vous pouvez faire $('#content h1.aktiv').hide(). Il n'y a aucune raison de tester pour voir si la classe existe.

+0

J'ai besoin d'un script, qui découvre s'il y a un objet avec la classe ".aktiv". Si la classe est trouvée, le parent parent parent devrait recevoir la même classe. La partie éditée, avec la phrase if, est juste quelque chose sur lequel j'ai trébuché - un bug, si vous voulez, que je voulais juste vous entendre les gars. –

+1

Vous pouvez faire $ ('# content h1.aktiv'). Parent(). Parent(). AddClass ('aktiv') sans conditions. –

0

La raison qui ne fonctionne pas est que this n'a pas de signification spécifique à l'intérieur d'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" 
    } 
}); 
0

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'); 
}