classList.remove とは何か
classList.remove は、要素から指定した「CSS クラス」を安全に取り除くメソッドです。指定したクラスが付いていなければ何も起こらず、エラーにもなりません。ここが重要です:className のような文字列操作と違い、スペース処理や部分一致のミスがなく、確実に“そのクラスだけ”を外せます。
基本の使い方(単体・複数のクラスを外す)
1つのクラスを外す
<div id="box" class="card highlight hidden"></div>
<script>
const box = document.getElementById("box");
box.classList.remove("hidden"); // → class="card highlight"
</script>
HTMLここが重要です:該当クラスのみが消え、他のクラスには影響しません。
複数のクラスをまとめて外す
<div id="msg" class="message is-show type-info is-sticky"></div>
<script>
const msg = document.getElementById("msg");
msg.classList.remove("is-show", "is-sticky"); // 複数引数で一括削除
// → class="message type-info"
</script>
HTMLここが重要です:複数削除は一度に呼ぶと読みやすく、無駄な再描画も抑えられます。
className との違い(文字列操作より安全で明確)
文字列操作の罠を避ける
<div id="box" class="card highlight hidden"></div>
<script>
const box = document.getElementById("box");
// 文字列置換は危険(部分一致や余計なスペースの事故が起きやすい)
box.className = box.className.replace("hidden", ""); // "highhiddenlight" などの事故に繋がる
// 正解:remove を使う
box.classList.remove("hidden");
</script>
HTMLここが重要です:className は“生の文字列”。部分一致やスペース処理のミスが出やすいので、削除は常に classList.remove を選びます。
状態管理の定石(add/remove/toggle を役割で使い分け)
明示的なオフ操作は remove
<button id="save" class="btn is-active">保存</button>
<script>
const save = document.getElementById("save");
function deactivate() {
save.classList.remove("is-active"); // 明確なオフ
}
</script>
HTMLここが重要です:オンは add、オフは remove、条件付きは toggle(, 条件)。役割分担で読みやすさと安全性が上がります。
排他的なクラスを整理する(エラー/成功の混在を防ぐ)
<input id="email" type="email" class="field">
<script>
const email = document.getElementById("email");
email.addEventListener("input", () => {
if (email.validity.valid) {
email.classList.remove("is-error");
email.classList.add("is-valid");
} else {
email.classList.remove("is-valid");
email.classList.add("is-error");
}
});
</script>
HTMLここが重要です:remove と add をセットで使えば、状態が混ざる事故を確実に防げます。
まとめて「グループ」を外す(種類別に掃除する)
既知の候補を一括削除してから、必要なものだけ追加
<div id="toast" class="toast type-info is-show"></div>
<script>
const toast = document.getElementById("toast");
function setToast(type) {
// まず、型クラスを掃除
toast.classList.remove("type-info", "type-warning", "type-error");
// 次に、表示状態の初期化
toast.classList.remove("is-show", "is-sticky");
// 必要なクラスだけを加える
toast.classList.add(`type-${type}`, "is-show");
}
setToast("warning"); // → class="toast type-warning is-show"
</script>
HTMLここが重要です:候補を“白リスト”で列挙して remove → add の順に適用すると、常に正しい集合に整います。
実践例(開閉 UI、モーダル、選択状態の解除)
ドロワーを閉じるときにクラスを外す
<button id="close">閉じる</button>
<aside id="drawer" class="drawer is-open theme-dark"></aside>
<script>
const close = document.getElementById("close");
const drawer = document.getElementById("drawer");
close.addEventListener("click", () => {
drawer.classList.remove("is-open"); // 閉じる
drawer.classList.add("is-closed");
});
</script>
HTMLモーダルを閉じたらボディの固定を解除
<div id="modal" class="modal is-open"></div>
<script>
const body = document.body;
function closeModal() {
document.getElementById("modal").classList.remove("is-open");
body.classList.remove("is-locked"); // スクロール固定解除
}
</script>
HTML選択状態を一括解除して、現在だけ有効化
<ul id="tabs">
<li class="tab is-active">A</li>
<li class="tab">B</li>
<li class="tab">C</li>
</ul>
<script>
const tabs = document.getElementById("tabs");
tabs.addEventListener("click", (e) => {
const t = e.target;
if (!(t instanceof Element)) return;
const li = t.closest(".tab");
if (!li) return;
// 既存の選択を一括解除
tabs.querySelectorAll(".tab.is-active")
.forEach(el => el.classList.remove("is-active"));
// クリックしたタブだけ選択
li.classList.add("is-active");
});
</script>
HTMLここが重要です:複数要素の“解除 → 現在だけ付与”は UX の基本パターン。remove の一括適用で事故が減ります。
よくある落とし穴と回避策(存在チェック・タイミング・契約)
要素の存在を確認してから操作する
const el = document.querySelector("#target");
if (!el) return;
el.classList.remove("is-active");
HTMLここが重要です:DOM 構築前は null になります。defer で読み込むか、DOMContentLoaded 後に実行するのが安全です。
クラス名の契約(CSS と JS の取り決め)を合わせる
- 契約: JS が外すクラスには、CSS 側で確実に意味がある(.is-active など)。
- 命名: 状態は is-、タイプは type-、テーマは theme-* と分ける。 ここが重要です:契約が揃っていると remove/add の意図が明確になり、保守が楽になります。
部分一致を期待しない(正確な名前を渡す)
classList.remove は「完全一致」だけを外します。曖昧な名前や typo は効きません。ここが重要です:クラス名は定数化(例:const ACTIVE=”is-active”)するとミスが減ります。
ヘルパーで一元化(条件付きの外し方を短くする)
条件に応じて外す/付けるを一本化
function setFlag(el, name, on) {
el.classList.toggle(name, !!on); // on=false なら remove、true なら add
}
// 使い方
setFlag(document.querySelector("#box"), "is-active", false); // remove
setFlag(document.querySelector("#box"), "is-active", true); // add
JavaScriptここが重要です:同じクラスをあちこちで add/remove するのはミスのもと。toggle(, 条件) を使い、ヘルパーで標準化すると読みやすくなります。
まとめ
classList.remove は、指定クラスだけを安全・確実に外せるメソッドです。className の文字列置換より堅牢で、複数クラスも一度に削除可能。状態管理では「オンを add、オフを remove、条件付きは toggle」を徹底し、排他的クラスは“白リスト掃除→必要だけ追加”で常に正しい集合へ整える。要素の存在と実行タイミングを守り、CSS とのクラス契約を揃える——この型を身につければ、初心者でも読みやすく壊れにくい UI 制御が書けます。
