Gibt es eine bevorzugte Methode, um zu bestimmen, ob einem Element eine Klasse unter Leistungsgesichtspunkten zugewiesen ist?
$('#foo').hasClass('bar');
oder
$('#foo').is('.bar');
Gibt es eine bevorzugte Methode, um zu bestimmen, ob einem Element eine Klasse unter Leistungsgesichtspunkten zugewiesen ist?
$('#foo').hasClass('bar');
oder
$('#foo').is('.bar');
Antworten:
Ich habe einen Test nach einem Kommentar und vier positiven Stimmen durchgeführt, um einen Kommentar abzugeben. Es stellt sich heraus, dass das, was ich gesagt hatte, die richtige Antwort ist. Hier ist das Ergebnis:

http://jsperf.com/hasclass-vs-is-so
Das isist Mehrzweck-, können Sie zum Beispiel tun is('.class'), is(':checked')usw. , die Mittel ishat , mehr zu tun , wo ist hasClassbeschränkt, die nur prüfen , ob eine Klasse zu sein Set oder nicht.
Daher hasClasssollte es schneller sein, wenn Leistung auf einem beliebigen Niveau Ihre Priorität ist.
hasClass ist viel schneller.
Da ises allgemeiner ist als hasClassund verwendet filter, um den bereitgestellten Ausdruck zu verarbeiten, scheint es wahrscheinlich, dass dies hasClassschneller ist.
Ich habe den folgenden Code über die Firebug-Konsole ausgeführt:
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();
Ich habe:
Kein großer Unterschied, kann aber relevant sein, wenn Sie viele Tests durchführen.
BEARBEITEN, wenn ich sage 'kein großer Unterschied, mein Punkt ist, dass Sie 10000 Zyklen machen müssen, um 0,8s eines Unterschieds zu sehen. Es würde mich überraschen, eine Webanwendung zu sehen, bei der ein Wechsel von iszu hasClasszu einer deutlichen Verbesserung der Gesamtleistung führt. Ich gebe jedoch zu, dass dies eine Geschwindigkeitsverbesserung von 35% ist.
Beide sollten in Bezug auf die Leistung ziemlich nahe beieinander liegen, $('#foo').hasClass('bar');scheinen mir jedoch lesbarer und semantisch korrekter zu sein.