JavaScript で HTML の class 属性を操作する方法についてです。
classList
element.classList
を使用すると要素に紐付いた class 属性のリストを返し、以下のようなメソッドを使用することができます。
メソッド | 概要 |
---|---|
add | 要素のクラスリストにクラスを追加 |
remove | 要素のクラスリストからクラスを削除 |
toggle | 要素のクラスリスト中の特定クラスの切替 |
contains | 要素のクラスリストが特定クラスを含むか否かの確認 |
element.classList - Web API インターフェイス | MDN
ただし実際のところclassList
で返されるオブジェクトはDOMTokenList
です。そのため上記のメソッドも classList のメソッドというよりは DOMTokenList のメソッドになります。
var ele = document.querySelector('#content'); var clazz = ele.classList; Object.prototype.toString.call(clazz); > "[object DOMTokenList]"
取得したクラスリストはlength
でリストの長さを取得したり、list[1]
またはlist.item(1)
のようにインデックスでアクセスすることも可能です。クラス属性が存在しない場合は長さ 0 のリストが返ります。
// 対象の要素 : <div id="content" class="center clear"></div> element.length; // 2 element[0]; // "center" element.item(1); // "clear" var none = document.querySelector('#hogehoge').classList; // [] none.length; // 0
DOMTokenList - Web APIs | MDN
DOMTokenList - DOM Standard
各メソッドの補足
add
メソッドは要素のクラスリストにクラスを追加します。復数追加したい場合はカンマ区切りで第2引数以降に渡します。
element.classList.add("1st"); // ["1st"] element.classList.add("2nd", "3rd"); // ["1st", "2nd", "3rd"]
remove
メソッドは要素のクラスリストからクラスを削除します。復数削除したい場合はカンマ区切りで第2引数以降に渡します。
element.classList.remove("1st"); // ["2nd", "3rd"] element.classList.remove("2nd", "3rd"); // []
contains
メソッドは要素のクラスリストに特定のクラスを含むか否かを判定します。第2引数以降を指定しても判定はされません。
element.classList.add("1st", "2nd", "3rd"); element.classList.contains("2nd"); // true element.classList.contains("4th", "3rd"); // false
toggle
メソッドは要素のクラスリスト中の特定クラスの切替ます。既にクラスが存在している場合は削除し、存在しない場合は追加されます。また、第2引数にtrue
を指定した場合は強制的にadd
メソッドに、false
を指定した場合はremove
メソッドと同じ挙動をとります。
element.classList.toggle("2nd"); // 戻り値は false / ["1st", "3rd"] element.classList.toggle("4th"); // 戻り値は true / ["1st", "3rd", "4th"] element.classList.toggle("2nd", true); // 戻り値は true / ["1st", "3rd", "4th", "2nd"] element.classList.toggle("3rd", false); // 戻り値は false / ["1st", "4th", "2nd"]
className
似たようなメソッドでelement.className
があります。このメソッドも要素の class 属性の値の取得と設定に用いることができます。ただし、クラスが復数存在した場合はスペース区切りの文字列で操作しなければいけないため、使い勝手はclassList
の方がいいです。クラスの追加ということができないため変更する場合は上書きする形になります。
element.className; // "1st 2nd 3rd" element.className = "4th 5th"; element.className; // "4th 5th" element.className = "1st 2nd 3rd " + element.className; element.className; // "1st 2nd 3rd 4th 5th"
element.className - Web API インターフェイス | MDN