Czy w jQuery zaleca się sprawdzenie, czy klasa jest już przypisana do elementu przed dodaniem tej klasy? Czy to w ogóle będzie miało jakiś efekt?
Na przykład:
<label class='foo'>bar</label>
W razie wątpliwości, czy klasa baz
została już przypisana label
, czy byłoby to najlepsze podejście:
var class = 'baz';
if (!$('label').hasClass(class)) {
$('label').addClass(class);
}
czy to wystarczy:
$('label').addClass('baz');
.hasClass
tylko wtedy, gdy muszę sprawdzić, czy klasa istnieje, jeśli muszę tylko przypisać klasę - używam.addClass
. jQuery nie powiela klasOdpowiedzi:
Po prostu zadzwoń
addClass()
. jQuery zrobi to za Ciebie. Jeśli sprawdzasz samodzielnie, podwajasz pracę, ponieważ jQuery nadal przeprowadzi sprawdzanie za Ciebie.źródło
Proste sprawdzenie w konsoli powiedziałoby ci, że
addClass
wielokrotne dzwonienie z tą samą klasą jest bezpieczne.W szczególności możesz znaleźć czek w źródle
źródło
To pytanie zwróciło moją uwagę po kolejnym, które zostało oznaczone jako duplikat tego .
Ta odpowiedź podsumowuje zaakceptowaną odpowiedź z niewielkimi dodatkowymi szczegółami.
Próbujesz zoptymalizować, unikając niepotrzebnego sprawdzania, w związku z tym oto czynniki, o których musisz wiedzieć:
class="collapse"
w kodzie HTML, wywołanieElement.classList.add("collapse");
nie spowoduje dodania dodatkowej klasy zwijania . Nie znam podstawowej implementacji, ale przypuszczam, że powinna być wystarczająco dobra.addClass
iremoveClass
implementacjach (sprawdziłem kod źródłowy ). PoaddClass
wykonaniu pewnych sprawdzeń i jeśli klasa istnieje, JQuery nie próbuje jej ponownie dodać. Podobnie w przypadkuremoveClass
JQuery robi coś,cur.replace( " " + clazz + " ", " " );
co powoduje usunięcie klasy tylko wtedy, gdy istnieje.Warto zauważyć, że JQuery przeprowadza pewną optymalizację swojej
removeClass
implementacji, aby uniknąć bezcelowego ponownego renderowania. Tak to wyglądaZatem najlepszą mikrooptymalizacją, jaką można by zrobić, byłaby uniknięcie narzutu wywołań funkcji i związanych z nimi kontroli implementacji.
Powiedzmy, że chcesz zmienić klasę o nazwie
collapse
, jeśli masz pełną kontrolę nad tym, kiedy klasa jest dodawana lub usuwana, a jeślicollapse
klasa jest początkowo nieobecna, możesz zoptymalizować w następujący sposób:Na marginesie, jeśli przełączasz klasę z powodu zmian w pozycji przewijania, zdecydowanie zalecamy ograniczenie obsługi zdarzeń przewijania.
źródło
źródło