esiste un metodo preferito per determinare se a un elemento è assegnata una classe, dal punto di vista delle prestazioni?
$('#foo').hasClass('bar');
o
$('#foo').is('.bar');
esiste un metodo preferito per determinare se a un elemento è assegnata una classe, dal punto di vista delle prestazioni?
$('#foo').hasClass('bar');
o
$('#foo').is('.bar');
Risposte:
Ho impegnato un test a seguito di un commento e quattro voti positivi per commentare molto. Si scopre che quello che avevo detto è la risposta corretta. Ecco il risultato:

http://jsperf.com/hasclass-vs-is-so
Il isè polivalente, si può per esempio fare is('.class'), is(':checked'), ecc, che mezzi isha più a che fare , dove si hasClassè limitata, che controlla solo per un essere insieme di classe o meno.
Quindi, hasClassdovrebbe essere più veloce se le prestazioni a qualsiasi livello sono la tua priorità.
hasClass è molto più veloce.
Poiché isè più generico di hasClasse utilizza filterper elaborare l'espressione fornita, sembra probabile che hasClasssia più veloce.
Ho eseguito il seguente codice dalla 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();
Ho ottenuto:
Non è una grande differenza, ma potrebbe essere rilevante se stai facendo molti test.
MODIFICA quando dico 'non una differenza enorme, il mio punto è che devi fare 10000 cicli per vedere 0,8s di differenza. Sarei sorpreso di vedere un'applicazione web tale che il passaggio da isa hasClassvedrebbe un miglioramento significativo delle prestazioni complessive. Tuttavia, ammetto che questo è un miglioramento del 35% della velocità.
Entrambi dovrebbero essere abbastanza vicini in termini di prestazioni, ma mi $('#foo').hasClass('bar');sembrano più leggibili e semanticamente corretti.