classList.toggleとは?
まず「classList」とは要素のクラス属性の情報を参照するプロパティで、「classList.add()」や「classList.remove()」というように記述してクラスの付与や削除といった操作を行いたいときに使います。
「classList.toggle()」は要素が特定のクラスを持っているかどうかの判定をした上で、持っていなければそのクラスを付与、持っていればそのクラスを削除する処理を行います。
「contains」「add」「remove」を組み合わせて作るような処理が「toggle」なら単体で実装できます。
classList.toggle()の使い方
classList.toggle()は下記のように引数に付け外しを行いたいクラスを記述して使用します。
ここでは例として、ボタンをクリックするたびに要素の背景色が切り替わる処理を作ってみたいと思います。
あらかじめCSSでクラスがある時とない時をセレクターにしたスタイルを用意しておきます。
ボタンに記述したonclick属性で、クリックされたらtoggleを使ったJSの処理を呼び出します。
HTML
<div id="test">toggle</div> <button onclick="changeBg()">切り替え</button>
CSS
#test{ background:#000033; color:#fff; } #test.active{ background:#bf0000; }
続いてJavaScriptでtoggleでクラスの付け外しを行う処理を作成します。
toggleを用いれば通常クラスの付与や削除に使う「add」「remove」は不要です。要素がクリックするたびに「active」というクラスを持っているか判定し、持っていない場合は「active」を付与、持っている場合は「active」を削除します。
JavaScript
function changeBg(){ var test = document.getElementById("test"); test.classList.toggle("active"); }
クラスの有無によってより複雑な処理を作りたい場合は、同じくclassListに用意されている「contains()」メソッドを使います。
「classList.contains」は要素が特定のクラスを含んでいるか調らべ「true」か「false」を返すので、戻り値で条件分岐を作ることができます。
「classList.contains()」についてはこちらのページにまとめています。
まとめ
以上が、JavaScriptのclassList.toggleでクラスの付け外しを行う方法です。
addやremove、containsと比べると使用する場面は限定的ですが、クリックに応じて交互にスタイルを切り替えるという機能は割とよく求められるので、それを簡単に記述できるというのは非常に助かりますね。