34 votes

Doit hasClass précéder removeClass - jQuery

Est-il nécessaire de vérifier si une classe existe avant d'utiliser l'api removeClass sur un objet jquery? par exemple.

 if($(this).hasClass("test"))
   $(this).removeClass("test");
 

ou

 $(this).removeClass("test");
 

sinon, pourquoi?

39voto

VisioN Points 62518

Utiliser simplement ce:

$(this).removeClass("test");

Il n'y a pas besoin de vérifier pour la classe existence.

De jQuery de sources , nous pouvons voir qu' removeClass méthode utilise replace méthode pour supprimer la sous-chaîne:

className = (" " + elem.className + " ").replace(rclass, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
    className = className.replace(" " + classNames[c] + " ", " ");
}​

Et replace de ne pas supprimer n'importe quoi, si la sous-chaîne correspondante n'existe pas.

6voto

wereHamster Points 75

Au moins pour google Chrome, il est utile d'ajouter un hasClass() vérifier avant de removeClass(), parce que jQuery sans condition affecte elem.className à la nouvelle chaîne, même si la chaîne n'a pas changé, ce qui provoque Chrome pour invalider et recalculer la mise en page.

On pourrait dire que c'est un bug dans Chrome et il doit vérifier si le nom de classe a réellement changé à partir de la valeur précédente. Cependant, il se pourrait aussi que le navigateur a pour recalculer la mise en page en raison de quelque obscure exigences qui sont écrits quelque part au fond de la spécification html.

Je n'ai pas testé Firefox. Le Safari de l'inspecteur web est inutile car il ne vous dira pas pourquoi la mise en page a été invalidé/recalculé (fonction javascript qui l'a causé).

3voto

thecodeparadox Points 41614

Non, il n'est pas nécessaire de vérifier removeClass() .

Utilisez simplement

    $(this).removeClass("test");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X