Egy weboldal, vagy alkalmazás esetében igen gyakori, hogy HTML osztályokat kell hozzáadnunk, eltávolítanunk, billegtetnünk különböző elemek esetében. A classList objektum segítségével ezt könnyen megtehetjük csak JavaScript-tel.

A DOM manipulálás nehézkes volt - akárcsak az elem kijelölés - csak JavaScript-tel. Mindez megváltozott a jQuery megjelenésével, a classList object nagyon hasonlóan működik.

Manapság a böngészők széles körben támogatják. Egy csak olvasható tulajdon minden DOM elemen.

A classList objektum szintaktikája

A szintaktika igen egyszerű: ki kell jelölnünk egy HTML elemet JavaScript-tel, majd használjuk a classList objektum egyik eljárását.

Hat eljárásunk van: add(), remove(), item(), toggle(), contains(), replace(). Ezen felül az objektum length tulajdonával hozzáférünk az osztályok számához is.

<!-- HTML markup -->
<div class="main is-front-page"></div>
// JavaScript kód
let main = document.querySelector('.main');

main.classList.remove('is-front-page');
main.classList.add('is-sub-page');
<!-- HTML eredmény -->
<div class="main is-sub-page"></div>

A teljes objektum megtekintéséhez logoljuk ki az element.classList objektumot a konzolra.

Osztály(ok) hozzáadása

Hogyha egy kiválasztott osztályt szeretnél hozzáadni, akkor add meg az adott elemen az add() eljárásnak paraméterként.

// Új osztály hozzáadása a '.main' elemhez
main.classList.add('has-sidebar');
// Több osztályt is hozzáadhatunk egyszerre vesszővel elválasztva
main.classList.add('has-sidebar', 'is-dark-style');
<!-- HTML eredmény -->
<div class="main is-sub-page has-sidebar is-dark-style"></div>

Az a jó ezekben a függvényekben, hogy akkor sem dobnak hibát, ha valami nem stimmel. Például ha olyan osztályt adsz hozzá, amivel már rendelkezik a kiválasztott elem, ebben az esetben nem lesz még egyszer hozzáadva. Ugyanez igaz akkor is, ha eltávolítanál. Nincs hiba, ha az osztály nem létezik.

Osztály(ok) eltávolítása

Hogy eltávolítsunk egy meghatározott osztályt a remove() eljárást kell használnunk. Akár több elemet is eltávolíthatunk egyszerre.

// A has-sidebar osztály eltávolítása a main elemről
main.classList.remove('has-sidebar');
<!-- HTML eredmény -->
<div class="main is-sub-page is-dark-style"></div>

Több osztály kezelése esetén akár a spread szintaktikát is használhatjuk:

let classes = ['is-sub-page', 'is-dark-style'];
main.classList.remove(...classes );

Osztályok billegtetése

A billegtető eljárás hasznos, mert így elkerülhetjük, hogy feltételeket írjunk. Ha egy elem rendelkezik a megadott osztállyal, akkor eltávolítjuk, ha nem, akkor hozzáadjuk.

// A kiválasztott osztály billegtetése
main.classList.toggle('has-sidebar');
<!-- HTML eredmény -->
<div class="main has-sidebar"></div>

A függvény true-val tér vissza, ha hozzáadta és false-al ha eltávolította az osztályt.

Rendelkezik egy második paraméterrel, ami a műveletet irányítja. Ha a második paraméter true, akkor hozzáadja az osztályt, ha false, akkor eltávolítja.

// Az is-dark-style osztály hozzáadása, vagy eltávolítása, a colorScheme == 'dark' feltétel alapján
main.classList.toggle('is-dark-style', colorScheme == 'dark' );

Osztály kicserélés

A classList.replace() eljárással egy már meglévő osztályt tudunk kicserélni egy másikra. Ez megint csak egy népszerű használati eset, amit rövidebben tudunk megoldani így.

// A 'main' osztály kicserélése a 'secondary'-re
div.classList.replace('main', 'secondary');
<!-- HTML eredmény -->
<div class="secondary has-sidebar"></div>

Tartalmazza-e egy elem a megadott osztályt

Ha szeretnénk ellenőrizni, hogy egy elem rendelkezik-e a megnevezett osztállyal azt is könnyen megtehetjük. Ez többnyire egy if feltételben lesz hasznos.

// true értékkel tér vissza
main.classList.contains('has-sidebar');

Az x-edik osztály lekérése

Az item() eljárással index alapján is lekérhetünk egy osztályt.

// Visszaadja a 'has-sidebar' osztályt
main.classList.item(1);