Dans jQuery, est-il recommandé de vérifier si une classe est déjà affectée à un élément avant d'ajouter cette classe? Cela aura-t-il même un effet quelconque?
Par exemple:
<label class='foo'>bar</label>
En cas de doute si une classe baz
a déjà été attribuée label
, serait-ce la meilleure approche:
var class = 'baz';
if (!$('label').hasClass(class)) {
$('label').addClass(class);
}
ou cela suffirait-il:
$('label').addClass('baz');
.hasClass
uniquement lorsque j'ai besoin de vérifier si la classe existe, si j'ai juste besoin d'attribuer une classe - j'utilise.addClass
. jQuery ne duplique pas les classesRéponses:
Appelez
addClass()
. jQuery effectuera la vérification pour vous. Si vous vérifiez vous-même, vous doublez le travail, car jQuery exécutera toujours la vérification pour vous.la source
Une simple vérification dans la console vous aurait dit qu'appeler
addClass
plusieurs fois avec la même classe est sûr.Plus précisément, vous pouvez trouver le chèque dans la source
la source
Cette question a attiré mon attention après une autre qui a été marquée comme un double de celle-ci .
Cette réponse résume la réponse acceptée avec un petit détail supplémentaire.
Vous essayez d'optimiser en évitant une vérification inutile, à cet égard, voici des facteurs dont vous devez être conscient:
class="collapse"
dans votre code HTML, l'appelElement.classList.add("collapse");
n'ajoutera pas de classe de réduction supplémentaire . Je ne connais pas l'implémentation sous-jacente, mais je suppose qu'elle devrait être assez bonne.addClass
etremoveClass
(j'ai vérifié le code source ). CaraddClass
, après avoir fait quelques vérifications et si une classe existe, JQuery n'essaye pas de l'ajouter à nouveau. De même pourremoveClass
, JQuery fait quelque chose le long de la lignecur.replace( " " + clazz + " ", " " );
qui supprimera une classe uniquement si elle existe.A noter, JQuery optimise son
removeClass
implémentation afin d'éviter un re-rendu inutile. Ça va comme çaLa meilleure micro- optimisation que vous puissiez faire serait donc d'éviter les frais généraux d'appel de fonction et les vérifications d'implémentation associées.
Supposons que vous souhaitiez basculer une classe nommée
collapse
, si vous contrôlez totalement le moment où la classe est ajoutée ou supprimée, et si lacollapse
classe est initialement absente, vous pouvez alors optimiser comme suit:En passant, si vous basculez une classe en raison de changements dans la position de défilement, il est fortement recommandé de limiter la gestion des événements de défilement.
la source
la source