web-dev-qa-db-fra.com

Dois-je utiliser "hasClass" avant "addClass"?

J'ai rencontré le script suivant qui vérifie si un élément a la classe a, et sinon, l'ajoute:

if (!$("div").hasClass("a")){
   $("div").addClass("a");
}

Comme jQuery n'ajoutera pas la classe si elle existe déjà, cela pourrait être changé en:

$("div").addClass("a");

Cependant, y a-t-il des améliorations de performances en utilisant hasClass d'abord, ou est-ce en utilisant la même méthode que addClass fait de toute façon, et donc en dupliquant la logique?

98
Curt

La vérification .hasClass() n'est pas utile car jQuery vérifiera également toujours depuis .addClass(). C'est juste un travail supplémentaire.

158
Jon

Vous pouvez voir dans le code source: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L38-L45 qu'ils vérifient si la classe existe lors de l'utilisation de addClass.

Il n'y a donc aucune raison d'utiliser la .hasClass() dans ce cas .. ( une exception serait si vous vouliez effectuer plus d'actions si l'élément n'avait pas la classe. . )

11
Gabriele Petrioli

Pour ce que ça vaut, il y a une amélioration des performances avec .hasClass() dans mes tests limités: http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

Cependant, même lorsque la fonction autonome .removeClass() signale plusieurs fois plus lentement dans Chrome, elle atteint environ 70 000 opérations par seconde.

6
chrisM