classList は「要素に付いているクラス名を出し入れするための専用リモコン」
HTML 要素には class 属性がありますよね。
<div class="box active"></div>
この "box active" みたいなクラス名を、
JavaScript から安全・簡単に操作するための API が classList です。
文字列をゴリゴリ書き換えるのではなく、
「クラスを追加」「クラスを削除」「クラスを切り替え」
といった操作を、メソッドで直感的に扱えます。
className で文字列を直接いじるより、
ミスが少なく、読みやすく、バグりにくい のが最大のメリットです。
classList の基本:DOM 要素から classList にアクセスする
まずは要素を取ってくる
<div id="box" class="box"></div>
const box = document.querySelector("#box");
console.log(box.classList);
JavaScriptbox.classList は、
その要素に付いているクラス名の「コレクション(配列っぽいもの)」です。
コンソールで見ると、DOMTokenList というオブジェクトで、
中に "box" などのクラス名が入っています。
ここからが本番で、classList にはよく使う便利メソッドが揃っています。
一番よく使うメソッドたち:add / remove / toggle / contains
add:クラスを追加する
box.classList.add("active");
JavaScriptこれで、class="box active" という状態になります。
同じクラスを何度 add しても、
重複して増えたりはしません(1 回だけ付く)。
remove:クラスを削除する
box.classList.remove("active");
JavaScriptこれで、class="box" に戻ります。
存在しないクラスを remove してもエラーにはならず、
何も起きません。
この「雑に呼んでも安全」な感じが、とても使いやすいです。
toggle:あれば消す、なければ付ける
box.classList.toggle("active");
JavaScriptactive が付いていなければ追加し、
付いていれば削除します。
「ON/OFF の切り替え」をしたいときの定番です。
例えば、ボタンで開閉するメニューなど。
button.addEventListener("click", () => {
menu.classList.toggle("open");
});
JavaScriptCSS 側で
.menu { display: none; }
.menu.open { display: block; }
としておけば、open クラスの ON/OFF だけで表示・非表示を切り替えられます。
contains:そのクラスを持っているかどうか調べる
if (box.classList.contains("active")) {
console.log("アクティブ状態です");
}
JavaScripttrue / false が返ってきます。
状態に応じて処理を分けたいときに使います。
例題:ボタンで「ON/OFF 状態」を切り替える
HTML
<button id="toggle">トグル</button>
<div id="lamp" class="lamp">OFF</div>
CSS(イメージ)
.lamp {
width: 100px;
height: 100px;
border-radius: 50%;
background: gray;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
.lamp.on {
background: gold;
color: black;
}
JavaScript
const toggleBtn = document.querySelector("#toggle");
const lamp = document.querySelector("#lamp");
toggleBtn.addEventListener("click", () => {
const isOn = lamp.classList.toggle("on");
lamp.textContent = isOn ? "ON" : "OFF";
});
JavaScriptここでやっていることは、
lamp.classList.toggle("on") で on クラスを付けたり消したりするtoggle の戻り値(true/false)で今の状態を知る
状態に応じてテキストを "ON" / "OFF" に変える
という流れです。
toggle の戻り値を使うのが、地味に便利なポイントです。
重要ポイント:className との違いと、classList を使うべき理由
className は「文字列を丸ごと扱う」ので壊しやすい
className でもクラスを操作できます。
box.className = "box active";
JavaScriptただし、文字列を丸ごと扱うので、
既存のクラスをうっかり消してしまう
スペースの入れ方をミスってバグる
クラスの有無を判定するのが面倒
など、細かいトラブルが起きやすいです。
例えば、「active だけ消したい」ときにreplace で文字列をいじるのは、かなり危険です。
classList は「クラスを配列的に扱う」ので安全
classList は、
クラス名を「トークン(単語)」として扱います。
add("active")remove("active")toggle("active")
といった操作は、
他のクラスに影響を与えずに済みます。
「クラスを 1 個の文字列として扱う」のではなく、
「クラスの集合を操作する」 という感覚で使えるのが、classList の一番大事な価値です。
初心者のうちは、
「クラスをいじるときは基本 classList」
と覚えてしまって大丈夫です。
複数クラスの追加・削除と、少しだけ応用
複数クラスを一度に add / remove できる
box.classList.add("a", "b", "c");
box.classList.remove("a", "c");
JavaScript引数をカンマ区切りで複数渡せます。
地味ですが、スッキリ書けて気持ちいいです。
状態を切り替えるときのパターン:add / remove / toggle の組み合わせ
例えば、「選択状態」を表す selected クラスを管理したいとします。
function select(elem) {
elem.classList.add("selected");
}
function unselect(elem) {
elem.classList.remove("selected");
}
function toggleSelect(elem) {
elem.classList.toggle("selected");
}
JavaScriptこういう小さな関数を用意しておくと、
コードの意図がとても読みやすくなります。
「クラス名そのもの」ではなく、
「状態(選択された・されていない)」を操作している
という感覚で書けるのが理想です。
例題:タブ切り替えを classList で実装するイメージ
HTML(イメージ):
<div class="tabs">
<button class="tab active" data-target="#panel1">タブ1</button>
<button class="tab" data-target="#panel2">タブ2</button>
</div>
<div id="panel1" class="panel active">パネル1</div>
<div id="panel2" class="panel">パネル2</div>
CSS(イメージ):
.panel { display: none; }
.panel.active { display: block; }
.tab.active { font-weight: bold; }
JavaScript:
const tabs = document.querySelectorAll(".tab");
const panels = document.querySelectorAll(".panel");
tabs.forEach((tab) => {
tab.addEventListener("click", () => {
// すべてのタブ・パネルから active を外す
tabs.forEach(t => t.classList.remove("active"));
panels.forEach(p => p.classList.remove("active"));
// クリックされたタブに active
tab.classList.add("active");
// 対応するパネルに active
const targetSelector = tab.dataset.target;
const panel = document.querySelector(targetSelector);
panel.classList.add("active");
});
});
JavaScriptここでのキモは、
「表示・非表示」「選択・非選択」を
すべて active クラスの有無で管理していることです。
JavaScript は「クラスを付けたり外したり」だけを担当し、
見た目の切り替えは CSS に任せる——
この役割分担ができると、一気にプロっぽい書き方になります。
初心者として classList API で本当に掴んでほしいこと
classList は「要素のクラス名を安全・直感的に操作するための API」add / remove / toggle / contains が基本の 4 本柱
クラスを文字列としていじる className より、バグりにくく読みやすい
「状態(ON/OFF・選択/非選択)」をクラスで表現し、classList で切り替えるのが定番パターン
見た目の変更は CSS、状態の変更は classList——という分業を意識すると一気にレベルが上がる
まずは、
ボタンを押したら要素に active を付けたり消したりするtoggle の戻り値で状態を判定してテキストを変える
といった小さな例を、自分の手で書いてみてください。
「クラスをいじる=見た目や状態を変える」という感覚が体に入ると、
classList はただの API ではなく、
「UI の状態をコントロールするための、超使いやすいリモコン」 に見えてきます。
