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?
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?
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.
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é).
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.