Manipulace s CSS třídamy

AndreaAndrea

HTML atribut class je znám každému webovému vývojáři a zejména kodérům. Umožňuje elementu přiřadit jednu nebo více tříd, které mohou být použity ke stylování elementu pomocí (CSS). Samozřejmě, že lze elementy stylovat přímo v javascriptu, ale to není příliš vhodný způsob. V JS se taktéž třídy využívají k označení prvků, protože je pak snažší vybírat množinu elementy nejen podle názvu html tagu, ale i podle tříd. Na přítomnost třídy u elementu běžně vážeme nějakou funkcionalitu, např. skrytí a odkrytí elementu, nebo zvýraznění položky v seznamu.

Nastavení class atributu patří mezi poměrně rutinní operace, které provádíme v DOMu. Pro přidávání, odebírání a přepínání CSS tříd JavaScript poskytuje dva způsoby.

Pomocí className

Nastavení požadované třídy se provádí změnou element.className.

element.className = "vlastni-trida";

Nevýhodou tohoto přístupu je fakt, že atribut class může obsahovat více tříd (např. class="class1 class2 class3"), které jsou unikátní. Duplicitní třídy nám chování elementu neovlivňují. Hodnota className se nastvuje celá. Mnipulace s třídami v atributu je obdobná práci s množinou, u které máme k dispozici operaci náleží, která nám řekne zda již prvek v množině je či není. V případě className si musí programátor ohlídat vše sám, vyparsovat a zkontrolovat jestli vybraná třída v řetězci je či ne. Operace přidání nové třídy je ještě jednoduchý:

element.className += ' selected';`

Nejspíš vás napadlo, že v případě duplicit nastanou problémy.

Pomocí classList

Není to tak dávno, co byla do JavaScriptu v prohlížeči přidána kolekce classList, která vrací DOMTokenList. Ta nám poskytuje množinový přístup ke třídám a tak je přidávání, odebírání a přepínání tříd stejně jednoduché jako třeba v jQuery, ke kterému se historicky mnozí vývojáři upínali, díky absenci těhle užitečných metod :). Dnes už je podpora v prohlížečích dobrá a není třeba se bát classList použít na produkci. Podporuje ji dokonce i IE 10.

Práce s třídami jako s množinou

element.classList.contains('vlastni-trida');
element.classList.add('vlastni-trida');
element.classList.remove('vlastni-trida');

Příjemný bonus je přepínací metoda toggle().

element.classList.toggle('vlastni-trida');

IE historicky neumožnovalo přidávat více tříd najednnou, Firefox přidal tuto možnost až od verze 26.

https://developer.mozilla.org/en-US/docs/Web/API/Element/classList