Jak mogę zmienić klasę elementu HTML w odpowiedzi na onclick
zdarzenie za pomocą JavaScript?
javascript
html
dom
Nathan Smith
źródło
źródło
element.setAttribute(name, value);
Wymieńname
sięclass
. Zamień navalue
dowolną nazwę nadaną klasie, ujętą w cudzysłów. Pozwala to uniknąć konieczności usuwania bieżącej klasy i dodawania innej. Ten przykład jsFiddle pokazuje pełny działający kod.<input type='button' onclick='addNewClass(this)' value='Create' />
oraz w sekcji javascript:function addNewClass(elem){ elem.className="newClass";
} OnlineOdpowiedzi:
Nowoczesne techniki HTML5 do zmiany klas
Nowoczesne przeglądarki dodały classList, który zapewnia metody ułatwiające manipulowanie klasami bez potrzeby posiadania biblioteki:
Niestety, nie działają one w Internet Explorerze przed wersją 10, choć istnieje pewna zaleta, aby dodać obsługę dla IE8 i IE9, dostępnych z tej strony . Jest jednak coraz bardziej wspierany .
Proste rozwiązanie dla różnych przeglądarek
Wykorzystuje się standardowy sposób wybierania elementu w JavaScript
document.getElementById("Id")
, co wykorzystują poniższe przykłady - możesz oczywiście uzyskać elementy na inne sposoby, a we właściwej sytuacji możesz po prostu użyćthis
- jednak szczegółowe omówienie tego jest poza zakresem odpowiedzi.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.)
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 usunąć klasę z elementu:
Aby usunąć pojedynczą klasę do elementu, bez wpływu na inne potencjalne klasy, wymagana jest prosta zamiana wyrażenia regularnego:
Wyjaśnienie tego wyrażenia regularnego jest następujące:
g
Flag opowiada zastąpić powtarzać w miarę potrzeby, w przypadku, gdy nazwa klasy zostało dodanych wiele razy.Aby sprawdzić, czy klasa jest już zastosowana do elementu:
Ten sam regex użyty powyżej do usunięcia klasy może być również użyty jako sprawdzenie, czy istnieje konkretna klasa:
Przypisywanie tych akcji do zdarzeń onclick:
Chociaż możliwe jest pisanie JavaScript bezpośrednio w atrybutach zdarzeń HTML (takich jak
onclick="this.className+=' MyClass'"
), nie jest to zalecane zachowanie. Zwłaszcza w większych aplikacjach, łatwiejszy do utrzymania kod jest osiągnięty przez oddzielenie znaczników HTML od logiki interakcji JavaScript.Pierwszym krokiem do osiągnięcia tego jest utworzenie funkcji i wywołanie funkcji w atrybucie onclick, na przykład:
(Nie jest wymagane umieszczanie tego kodu w znacznikach skryptu, służy to jedynie zwięzłości przykładu, a włączenie JavaScript w osobnym pliku może być bardziej odpowiednie).
Drugim krokiem jest przeniesienie zdarzenia onclick z HTML i do JavaScript, na przykład za pomocą addEventListener
(Zauważ, że część window.onload jest wymagana, aby zawartość tej funkcji była wykonywana po zakończeniu ładowania HTML - bez tego MyElement może nie istnieć po wywołaniu kodu JavaScript, więc linia się nie powiedzie.)
Frameworky i biblioteki JavaScript
Powyższy kod jest w standardzie JavaScript, jednak powszechną praktyką jest użycie frameworka lub biblioteki w celu uproszczenia typowych zadań, a także skorzystanie ze naprawionych błędów i przypadków brzegowych, o których możesz nie pomyśleć podczas pisania kodu.
Chociaż niektórzy uważają, że przesadą jest dodanie frameworka o wielkości ~ 50 KB do zwykłej zmiany klasy, jeśli wykonujesz znaczną ilość pracy JavaScript lub coś, co może mieć nietypowe zachowanie w różnych przeglądarkach, warto to rozważyć.
(Z grubsza, biblioteka jest zestawem narzędzi zaprojektowanych do określonego zadania, podczas gdy framework zazwyczaj zawiera wiele bibliotek i wykonuje pełny zestaw obowiązków.)
Powyższe przykłady zostały odtworzone poniżej przy użyciu jQuery , prawdopodobnie najczęściej używanej biblioteki JavaScript (choć są też inne, które warto zbadać).
(Uwaga:
$
tutaj jest obiekt jQuery).Zmiana klas za pomocą jQuery:
Ponadto jQuery zapewnia skrót do dodawania klasy, jeśli nie ma zastosowania, lub usuwania klasy, która:
Przypisywanie funkcji do zdarzenia click za pomocą jQuery:
lub bez potrzeby posiadania identyfikatora:
źródło
class="button MyClass MyClass MyClass"
Możesz także po prostu:
Aby przełączyć klasę (usuń, jeśli istnieje, dodaj ją):
źródło
classList
podkładki Eli Greya .classList
.W jednym z moich starych projektów, które nie korzystały z jQuery, zbudowałem następujące funkcje dodawania, usuwania i sprawdzania, czy element ma klasę:
Na przykład, jeśli chcę
onclick
dodać klasę do przycisku, mogę użyć tego:Do tej pory na pewno lepiej byłoby użyć jQuery.
źródło
Możesz użyć
node.className
tak:Powinno to działać w IE5.5 i nowszych zgodnie z PPK .
źródło
Wow, zaskoczony, że jest tu tak wiele odpowiedzi na pytanie o przesadę ...
źródło
Używając czystego kodu JavaScript:
źródło
To działa dla mnie:
źródło
el.setAttribute('class', newClass)
lub lepiejel.className = newClass
. Ale nieel.setAttribute('className', newClass)
.Równie dobrze możesz rozszerzyć obiekt HTMLElement, aby dodać metody dodawania, usuwania, przełączania i sprawdzania klas ( gist ):
A następnie użyj tego w następujący sposób (kliknięcie doda lub usunie klasę):
Oto demo .
źródło
Aby dodać informacje z innego popularnego środowiska, Google Closures, zobacz ich klasę dom / class:
Jedną z opcji wyboru elementu jest użycie goog.dom.query z selektorem CSS3:
źródło
Kilka drobnych notatek i poprawek do poprzednich wyrażeń regularnych:
Będziesz chciał to zrobić globalnie, jeśli lista klas ma nazwę klasy więcej niż jeden raz. Prawdopodobnie będziesz chciał usunąć spacje z końców listy klas i przekonwertować wiele spacji na jedną spację, aby nie dopuścić do uruchomienia serii spacji. Żadna z tych rzeczy nie powinna stanowić problemu, jeśli jedyny kod migający z nazwami klas używa poniższego wyrażenia regularnego i usuwa nazwę przed jej dodaniem. Ale. Cóż, kto wie, kto może bawić się z listą nazw klas.
W wyrażeniu regularnym nie jest rozróżniana wielkość liter, więc błędy w nazwach klas mogą pojawiać się, zanim kod zostanie użyty w przeglądarce, która nie dba o wielkość liter w nazwach klas.
źródło
Zmień klasę CSS elementu za pomocą JavaScript w ASP.NET :
źródło
Chciałbym użyć jQuery i napisać coś takiego:
Ten kod dodaje funkcję, która ma być wywoływana po kliknięciu elementu id jakiś element . Funkcja dołącza kliknięcie do atrybutu klasy elementu, jeśli nie jest już jego częścią, i usuwa go, jeśli już tam jest.
Tak, aby dodać ten kod, musisz dodać odwołanie do biblioteki jQuery na swojej stronie, ale przynajmniej możesz mieć pewność, że większość funkcji w bibliotece będzie działać na prawie wszystkich współczesnych przeglądarkach, a to pozwoli zaoszczędzić czas na wdrożenie własny kod, aby zrobić to samo.
Dzięki
źródło
jQuery
w długiej formie tylko raz.jQuery(function($) { });
sprawia, że$
dostępne wewnątrz funkcji we wszystkich przypadkach.Linia
Powinien być:
źródło
Zmień klasę elementu w waniliowym JavaScript z obsługą IE6
Możesz spróbować użyć
attributes
właściwości węzła, aby zachować zgodność ze starymi przeglądarkami, nawet IE6:źródło
Oto moja wersja, w pełni działająca:
Stosowanie:
źródło
foobar
jeśli spróbujesz usunąć klasęfoo
. JS w atrybutach wewnętrznej procedury obsługi zdarzeń został uszkodzony przed edycją. 4-letnia zaakceptowana odpowiedź jest znacznie lepsza.foobar
problem. Zobacz test tutajOto toggleClass do przełączania / dodawania / usuwania klasy na elemencie:
widzieć jsfiddle
Zobacz także moją odpowiedź tutaj dotyczącą dynamicznego tworzenia nowej klasy
źródło
W kodzie używam następujących waniliowych funkcji JavaScript. Używają wyrażeń regularnych i
indexOf
nie wymagają cytowania znaków specjalnych w wyrażeniach regularnych.Możesz także użyć element.classList we współczesnych przeglądarkach.
źródło
OPCJE.
Oto kilka przykładów stylów w porównaniu z klasami, aby zobaczyć, jakie masz dostępne opcje i jak
classList
robić, co chcesz.style
vs.classList
Różnica pomiędzy
style
iclassList
jest to, że zestyle
jesteś dodając do właściwości typu elementu, aleclassList
jest trochę kontrolowanie klasa (-y) elementu (add
,remove
,toggle
,contain
), ja pokaże, jak używaćadd
iremove
metody, ponieważ są to popularne.Przykład stylu
Jeśli chcesz dodać
margin-top
właściwość do elementu, wykonaj następujące czynności:Przykład classList
Powiedzmy, że mamy
<div class="class-a class-b">
w tym przypadku mamy 2 lekcje dodania elementu div już,class-a
iclass-b
, i chcemy sterować Jakie klasyremove
i co do klasyadd
. To gdzieclassList
staje się przydatny.Usunąć
class-b
Dodaj
class-c
źródło
Pomyślałem, że wrzucę to:
źródło
po prostu powiedz,
myElement.classList="new-class"
chyba że musisz zachować inne istniejące klasy, w którym to przypadku możesz użyćclassList.add, .remove
metod.źródło
OK, myślę, że w tym przypadku powinieneś użyć jQuery lub napisać własne metody w czystym javascript, preferuję dodawanie własnych metod zamiast wstrzykiwania całej jQuery do mojej aplikacji, jeśli nie potrzebuję tego z innych powodów.
Chciałbym zrobić coś takiego jak poniżej jako metody do mojego środowiska javascript, aby dodać kilka funkcji, które obsługują dodawanie klas, usuwanie klas itp. Podobnych do jQuery, jest to w pełni obsługiwane w IE9 +, również mój kod jest napisany w ES6, więc potrzebujesz aby upewnić się, że Twoja przeglądarka go obsługuje lub używasz czegoś takiego jak babel, w przeciwnym razie musisz użyć składni ES5 w kodzie, również w ten sposób znajdujemy element za pomocą identyfikatora, co oznacza, że element musi mieć identyfikator do wybrania:
i możesz po prostu zadzwonić, użyj ich jak poniżej, wyobraź sobie, że twój element ma identyfikator „id” i klasę „class”, upewnij się, że przekazujesz je jako ciąg znaków, możesz użyć Utilities jak poniżej:
źródło
classList
DOM API:Bardzo wygodnym sposobem dodawania i usuwania klas jest
classList
DOM API. Ten interfejs API pozwala nam wybrać wszystkie klasy określonego elementu DOM w celu zmodyfikowania listy za pomocą javascript. Na przykład:W dzienniku możemy zaobserwować, że zwracamy obiekt nie tylko klasami elementu, ale także wieloma pomocniczymi metodami i właściwościami. Ten obiekt dziedziczy z interfejsu DOMTokenList , interfejsu używanego w DOM do reprezentowania zestawu tokenów oddzielonych spacjami (jak klasy).
Przykład:
źródło
Tak, jest na to wiele sposobów. W składni ES6 możemy to łatwo osiągnąć. Użyj tego kodu, aby przełączać dodawanie i usuwanie klasy.
źródło
użycie przyjętej powyżej odpowiedzi jest prostą funkcją przeglądarki, aby dodać i usunąć klasę
dodaj klasę:
usuń klasę:
źródło
Wiele odpowiedzi, wiele dobrych odpowiedzi.
LUB
Otóż to.
A jeśli naprawdę chcesz wiedzieć, dlaczego i kształcić się, proponuję przeczytać odpowiedź Petera Boughtona , jest idealna.
Uwaga:
Jest to możliwe w przypadku ( dokumentu lub zdarzenia ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
źródło
W javascript znajduje się właściwość className, która służy do zmiany nazwy klasy elementu HTML. Istniejąca wartość klasy zostanie zastąpiona nową, którą przypisałeś w className.
Kredyt - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
źródło
Pytanie OP brzmiało: Jak zmienić klasę elementu za pomocą JavaScript?
Nowoczesne przeglądarki pozwalają to zrobić za pomocą jednej linii javascript :
document.getElementById('id').classList.replace('span1','span2')
classList
Atrybut zapewnia DOMTokenList który ma różne metody . Możesz operować na klasie classList elementu, używając prostych manipulacji, takich jak add () , remove () lub replace () . Lub uzyskaj bardzo wyrafinowane i manipuluj klasami, tak jak w przypadku obiektu lub mapy za pomocą klawiszy () , wartości () , wpisów ()Odpowiedź Petera Boughtona jest świetna, ale ma już ponad dekadę. Wszystkie nowoczesne przeglądarki obsługują teraz DOMTokenList - patrz https://caniuse.com/#search=classList, a nawet IE11 obsługuje niektóre metody DOMTokenList
źródło
próbować
Pokaż fragment kodu
źródło
Działający kod JavaScript:
Możesz pobrać działający kod z tego linku .
źródło
Oto prosty kod jQuery, aby to zrobić.
Tutaj,
Powodzenia.
źródło