remove とは何か(直接削除のイメージ)
remove は、要素自身が「自分を親から切り離して画面から消える」ためのメソッドです。document.getElementById(“x”).remove() のように、親を意識せず一発で削除できます。ここが重要です:remove は「自分で自分を外す」ため、parent.removeChild(child) と違って“親指定”が不要。シンプルで読みやすく、モダンブラウザで広く使えます。
基本の使い方(単体削除とまとめ削除)
単体の要素を直接削除する
<div id="card">カード</div>
<script>
const card = document.getElementById("card");
card.remove(); // 画面から消える。親との関係が切れる
</script>
HTMLここが重要です:remove は“存在していれば成功、無ければ何も起こらない”安全な動作です。親を参照する必要がないため、再利用性の高いコンポーネント内コードでも使いやすいです。
まとめて削除する(クエリで拾って一気に処理)
<div class="toast">通知A</div>
<div class="toast">通知B</div>
<script>
document.querySelectorAll(".toast").forEach(node => node.remove());
</script>
HTMLここが重要です:NodeList を回して remove するだけで、複数要素を一括削除できます。DOM の再計算は削除数に応じて発生しますが、“まとめて”処理することで視覚のチラつきを抑えられます。
remove と removeChild の違い(親を意識するかしないか)
親を意識しない remove/親から外す removeChild
<ul id="list">
<li id="a">A</li>
<li id="b">B</li>
</ul>
<script>
const b = document.getElementById("b");
b.remove(); // 親指定なしで削除(モダン)
// 伝統的な書き方(親に対して削除)
// document.getElementById("list").removeChild(b);
</script>
HTMLここが重要です:どちらも結果は同じですが、remove は読みやすく、削除対象が決まっている場面でミスが少ないです。親が必要なシナリオ(たとえば old = parent.removeChild(child) の返り値を使って再挿入したい)では removeChild を選びます。
よくある落とし穴と安全対策(参照・イベント・クリーンアップ)
参照が残るとメモリが回収されないことがある
let btn = document.getElementById("btn");
const handler = () => {/*…*/};
btn.addEventListener("click", handler);
btn.remove(); // 画面からは消える
btn = null; // 外部参照も切る(ガベージコレクションされやすく)
JavaScriptここが重要です:remove は DOM から外すだけです。グローバル変数、配列、Map などに残った参照は引き続きメモリを保持します。不要になったら参照を null にし、タイマー(setInterval)、Observer(Mutation/Intersection)、一時URL(URL.createObjectURL)も停止・解放します。
Object URL やメディアの解放を忘れない
const url = URL.createObjectURL(file);
const img = document.getElementById("preview");
img.src = url;
// 削除するタイミングで解放
img.remove();
URL.revokeObjectURL(url);
JavaScriptここが重要です:一時的なリソースは“明示的な後片付け”が必要です。remove だけではメモリ資源が解放されないケースに注意します。
位置に依存しない削除(closest で目的の塊を消す)
クリックされたボタンの“親カード”を消す
<article class="card">
<p>内容</p>
<button class="close">閉じる</button>
</article>
<script>
document.addEventListener("click", (e) => {
const btn = e.target.closest(".close");
if (!btn) return;
const card = btn.closest(".card"); // 削除対象の単位に辿る
if (card) card.remove(); // ひとまとまりを削除
});
</script>
HTMLここが重要です:closest で“削除単位”に確実に辿り、remove で消すと、内部構造が変わっても壊れにくいコードになります。親を固定参照しておくより保守性が高いです。
部分クリアと全クリア(replaceChildren や textContent との比較)
子要素だけ全消ししたいなら置き換えが便利
<div id="box">
<p>一行目</p>
<p>二行目</p>
</div>
<script>
const box = document.getElementById("box");
box.replaceChildren(); // 中身を全部削除(自分自身は残す)
// box.textContent = ""; // 同様に中身を空にできる
</script>
HTMLここが重要です:要素自体は残して“中身だけ”消すなら replaceChildren や textContent が最短です。要素ごと完全に消したいなら remove を使います。この切り分けを明確にすると、意図が伝わるコードになります。
削除後の再挿入(一時保管して Undo を実装)
削除前に位置情報を持っておく
<ul id="list">
<li id="a">A</li>
<li id="b">B</li>
<li id="c">C</li>
</ul>
<script>
const b = document.getElementById("b");
const parent = b.parentNode;
const next = b.nextSibling;
// 一時保管:ノードそのものを変数に保持
b.remove();
// Undo:元の位置に戻す
if (next) parent.insertBefore(b, next);
else parent.appendChild(b);
</script>
HTMLここが重要です:remove は返り値が無いので、再挿入したい場合は“元のノードそのもの”を変数で持ち、元位置の目印(nextSibling)も保管しておくと綺麗に戻せます。
実践例(モーダルのクリーンアップ、通知の自動消去、動的行の削除)
モーダルを閉じるときに関連要素をセットで削除
<div id="backdrop" class="backdrop"></div>
<div id="modal" class="modal">内容</div>
<script>
function closeModal() {
document.getElementById("modal")?.remove();
document.getElementById("backdrop")?.remove();
// 必要ならスクロールロック解除やフォーカス復帰もここで
}
</script>
HTMLここが重要です:表示・操作不可・読み上げ(aria)などの状態を“セットで”元に戻す設計にします。remove は視覚とDOM構造を即時に整えられます。
トースト通知を出して一定時間で自動削除
function toast(text, kind = "info") {
const t = document.createElement("div");
t.className = `toast toast-${kind}`;
t.textContent = text;
document.body.append(t);
setTimeout(() => t.remove(), 2000);
}
toast("保存しました", "success");
JavaScriptここが重要です:create → append → remove(タイマー)の型を覚えると、使い捨て UI を簡単に実装できます。
行削除ボタンで対象行を消す
<table id="grid">
<tr><td>りんご</td><td><button class="del">削除</button></td></tr>
<tr><td>バナナ</td><td><button class="del">削除</button></td></tr>
</table>
<script>
document.getElementById("grid").addEventListener("click", (e) => {
const btn = e.target.closest(".del");
if (!btn) return;
const row = btn.closest("tr");
row?.remove();
});
</script>
HTMLここが重要です:イベント委譲+closest+remove の組み合わせは、後から追加された行にも自動対応でき、コードが短く堅牢です。
まとめ(直接削除の作法)
remove は「要素自身が、親から即座に離れて画面から消える」ための直感的で強力なメソッドです。親を意識せず書けるためバグが減り、複数削除も簡単。削除後は外部参照・タイマー・Observer・一時URLなどの“後片付け”を忘れず、部分削除は replaceChildren/textContent を使い分ける。closest と組み合わせれば“削除単位”へ確実に辿れて、構造変化にも強い。これらを押さえれば、初心者でも安全で意図通りの“直接削除”がすっきり書けます。
