Mam element, który ma już klasę:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Teraz chcę utworzyć funkcję JavaScript, która doda klasę do div
(nie zamienia, ale dodaje).
Jak mogę to zrobić?
javascript
css
dom-manipulation
Blankman
źródło
źródło
element.classList.add("my-class")
zamiast tego.Odpowiedzi:
Jeśli kierujesz reklamy tylko na nowoczesne przeglądarki:
Użyj element.classList.add, aby dodać klasę:
I element.classList.remove, aby usunąć klasę:
Jeśli potrzebujesz obsługiwać Internet Explorera 9 lub starszego:
Dodaj spację oraz nazwę nowej klasy do
className
właściwości elementu. Najpierw umieśćid
element, aby łatwo uzyskać referencję.Następnie
Zwróć uwagę na miejsce wcześniej
otherclass
. Ważne jest, aby uwzględnić spację, w przeciwnym razie zagraża to istniejącym klasom, które znajdują się przed nią na liście klas.Zobacz także element.className w MDN .
źródło
Najłatwiejszym sposobem na to bez żadnych ram jest użycie metody element.classList.add .
Edycja: A jeśli chcesz usunąć klasę z elementu -
Wolę nie dodawać żadnych pustych miejsc i samodzielnie obsługiwać zduplikowanych wpisów (co jest wymagane podczas korzystania z tego
document.className
podejścia). Istnieją pewne ograniczenia przeglądarki , ale można je obejść za pomocą wielopełniaczy .źródło
znajdź element docelowy „d”, jak chcesz, a następnie:
możesz owinąć to w sprytniejszy sposób, aby sprawdzić wcześniejsze istnienie i sprawdzić wymagania dotyczące miejsca itp.
źródło
split
nazwę klasy w białych znakach, usuń tę, której nie chcesz z wynikowej tablicy, a następniejoin
tablicę ponownie ... lub użyjelement.classList.remove
.Dodaj klasę
Kompatybilność krzyżowa
W poniższym przykładzie dodajemy a
classname
do<body>
elementu. Jest to zgodne z IE-8.To jest skrót dla następujących ...
Wydajność
Jeśli bardziej zależy Ci na wydajności niż na kompatybilności krzyżowej, możesz skrócić ją do następujących, czyli o 4% szybciej.
Wygoda
Alternatywnie możesz użyć jQuery, ale wynikowa wydajność jest znacznie mniejsza. 94% wolniej według jsPerf
Usuwanie klasy
Wydajność
Selektywne używanie jQuery jest najlepszą metodą usuwania klasy, jeśli zależy Ci na wydajności
Bez jQuery jest o 32% wolniejszy
Bibliografia
Korzystanie z prototypu
Korzystanie z YUI
źródło
a.classList ? ...
) będzie miała jakąkolwiek różnicę prędkości w porównaniu do zwykłej (if (a.classList) { ....
)?classList.remove()
. Dlaczego tego nie używałeś? jest znacznie szybszy niż jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
do wszystkiego oprócz usuwania klas, dlatego o to pytam.Inne podejście do dodania klasy do elementu za pomocą czystego JavaScript
Aby dodać klasę:
Aby usunąć klasę:
źródło
Kiedy praca, którą wykonuję, nie wymaga użycia biblioteki, korzystam z tych dwóch funkcji:
źródło
if( cn.indexOf( classname ) != -1 ) { return; }
Uwaga: jeśli dodasz klasę „btn”, a klasa „btn-info” już tu jest, to się nie powiedzie.element.className.split(" ");
aby zapobiec zgłoszonemu tutaj problemowi @AlexandreDieulot.Zakładając, że robisz coś więcej niż tylko dodawanie tej jednej klasy (np. Masz żądania asynchroniczne itd.), Zaleciłbym bibliotekę taką jak Prototype lub jQuery .
Dzięki temu prawie wszystko, co musisz zrobić (w tym to), stanie się bardzo proste.
Powiedzmy, że masz już jQuery na swojej stronie, możesz użyć takiego kodu, aby dodać nazwę klasy do elementu (w tym przypadku podczas ładowania):
Sprawdź przeglądarkę API jQuery, aby zobaczyć inne rzeczy.
źródło
Możesz użyć metody classList.add LUB classList.remove, aby dodać / usunąć klasę z elementu.
Powyższy kod doda (i NIE zastąpi) klasę „anyclass” do nameElem. Podobnie możesz użyć metody classList.remove (), aby usunąć klasę.
źródło
Aby dodać dodatkową klasę do elementu:
Aby dodać klasę do elementu, nie usuwając / nie wpływając na istniejące wartości, dodaj spację i nową nazwę klasy, tak jak poniżej:
Aby zmienić wszystkie klasy dla elementu:
Aby zastąpić wszystkie istniejące klasy jedną lub większą liczbą nowych klas, ustaw atrybut className:
(Możesz użyć listy rozdzielanej spacjami, aby zastosować wiele klas.)
źródło
Jeśli nie chcesz używać jQuery i chcesz obsługiwać starsze przeglądarki:
źródło
Wiem, że IE9 jest oficjalnie wyłączony i możemy to osiągnąć,
element.classList
jak wiele powiedziano powyżej, ale po prostu próbowałem dowiedzieć się, jak to działa bezclassList
pomocy wielu odpowiedzi powyżej, mogłem się tego nauczyć.Poniższy kod rozszerza wiele powyższych odpowiedzi i poprawia je, unikając dodawania zduplikowanych klas.
źródło
Ja również uważam, że najszybszym sposobem jest użycie Element.prototype.classList jak w es5:
document.querySelector(".my.super-class").classList.add('new-class')
ale w ie8 nie ma czegoś takiego jak Element.prototype.classList, w każdym razie można go wypełnić za pomocą tego fragmentu (można go swobodnie edytować i ulepszać ):źródło
Aby rozwinąć to, co powiedzieli inni, wiele klas CSS jest połączonych w jednym ciągu, oddzielonych spacjami. Tak więc, jeśli chcesz go na stałe zakodować, wyglądałoby to tak:
Stamtąd możesz łatwo uzyskać javascript niezbędny do dodania nowej klasy ... po prostu dodaj spację, a następnie nową klasę do właściwości className elementu. Wiedząc o tym, możesz również napisać funkcję, aby usunąć klasę później, jeśli zajdzie taka potrzeba.
źródło
Aby w prosty sposób dodawać, usuwać lub sprawdzać klasy elementów:
źródło
Możesz zastosować nowoczesne podejście podobne do jQuery
Jeśli chcesz zmienić tylko jeden element, pierwszy, który JS znajdzie w DOM, możesz użyć tego:
Pamiętaj, aby zostawić jedno miejsce przed nazwą klasy.
Jeśli masz wiele klas, w których chcesz dodać nową klasę, możesz jej użyć w ten sposób
źródło
Myślę, że lepiej jest używać czystego JavaScript, który możemy uruchomić na DOM przeglądarki.
Oto funkcjonalny sposób jego użycia. Użyłem ES6, ale możesz swobodnie korzystać z ES5 i wyrażenia funkcji lub definicji funkcji, w zależności od tego, który kod JavaScript jest odpowiedni.
źródło
Próbka z czystym JS. W pierwszym przykładzie otrzymujemy identyfikator naszego elementu i dodajemy np. 2 klasy.
W drugim przykładzie otrzymujemy nazwę klasy elementu i dodajemy jeszcze 1.
źródło
Dla tych, którzy używają Lodash i chcą zaktualizować
className
ciąg:źródło
po pierwsze, daj div identyfikator. Następnie wywołaj funkcję appendClass:
źródło
indexOf
jest naiwnym rozwiązaniem i ma już wskazany problem .Za pomocą interfejsu API querySelector można wybrać element, a następnie utworzyć funkcję z elementem i nową nazwą klasy jako parametrami. Korzystanie z listy klas w nowoczesnych przeglądarkach, w innym przypadku w IE8. Następnie możesz wywołać funkcję po zdarzeniu.
źródło
Najkrótszy
Pokaż fragment kodu
źródło
LUB:
Pierwsze podejście pomogło w dodaniu klasy, gdy drugie podejście nie zadziałało.
Nie zapomnij zachować miejsca przed
' someclassname'
pierwszym podejściem.Do usunięcia możesz użyć:
źródło
Ten kod js działa dla mnie
zapewnia zastąpienie nazwy klasy
Aby dodać wystarczy użyć
Aby usunąć użycie
Mam nadzieję, że to jest pomocne do sombody
źródło
W YUI, jeśli dodasz yuidom , możesz użyć
YAHOO.util.Dom.addClass('div1','className');
HTH
źródło