Existe-t-il une méthode préférée pour déterminer si une classe est attribuée à un élément, du point de vue des performances?
$('#foo').hasClass('bar');
ou
$('#foo').is('.bar');
Existe-t-il une méthode préférée pour déterminer si une classe est attribuée à un élément, du point de vue des performances?
$('#foo').hasClass('bar');
ou
$('#foo').is('.bar');
Réponses:
J'ai commis un test après un commentaire et quatre votes positifs pour très commenter. Il s'avère que ce que j'avais dit est la bonne réponse. Voici le résultat:

http://jsperf.com/hasclass-vs-is-so
Le isest polyvalent, vous pouvez par exemple faire is('.class'), is(':checked')etc qui des moyens isa plus à voir où est hasClassest limitée , ce qui ne vérifie que pour une classe ou non être ensemble.
Par conséquent, cela hasClassdevrait être plus rapide si la performance à n'importe quel niveau est votre priorité.
hasClass c'est beaucoup plus rapide.
Étant donné qu'il isest plus générique que hasClasset utilise filterpour traiter l'expression fournie, il semble probable que ce hasClasssoit plus rapide.
J'ai exécuté le code suivant à partir de la console Firebug:
function usingIs() {
for (var i=0; i<10000;i++) {
$('div#example-0').is('.test');
}
}
function usingHas(){
for (var i=0; i<10000;i++) {
$('div#example-0').hasClass('test');
}
}
usingIs();
usingHas();
J'ai eu:
Ce n'est pas une énorme différence, mais cela peut être pertinent si vous faites beaucoup de tests.
EDIT quand je dis «pas une énorme différence, mon point est que vous devez faire 10000 cycles pour voir 0,8 s de différence. Je serais surpris de voir une application Web telle que le passage de isà hasClasspermettrait une amélioration significative des performances globales. Cependant, j'accorde que c'est une amélioration de 35% de la vitesse.
Les deux devraient être assez proches en termes de performances mais $('#foo').hasClass('bar');me semblent plus lisibles et sémantiquement corrects.