3秒でわかる
ブラウザがHTMLを木構造のオブジェクトとして持ち直したもの。JavaScriptから要素を探して書き換え、ページを読み込み直さずに画面を変えるために使います。
30秒図解
もう少し詳しく
どういうものか
DOM は Document Object Model の略で、ブラウザが読み込んだ HTML を、JavaScript から触れる木構造のオブジェクトとして持ち直したものです。 DOM が無ければ、表示を変えるたびにサーバーへページを取りに行くしかありません。入力欄のエラー表示、開閉するメニュー、「もっと見る」で増える一覧といった動きは、すべて DOM を書き換えることで実現しています。ブラウザの開発者ツールで Elements タブに映っているのは、HTML ソースではなく現在の DOM です。ソースを見ても無い要素がそこに映っているときは、JavaScript が後から差し込んだと分かります。 HTML は設計図、DOM は建った建物、と分けて覚えると混乱しません。JavaScript が触れるのは建物の方です。 を根として 、その下の が枝分かれし、テキストも一つのノードとして木にぶら下がります。重要なのは、DOM は HTML ファイルそのものではないという点です。ファイルは最初の一回だけ読まれ、その後のページの状態は DOM が持ちます。JavaScript で DOM を書き換えると画面が変わり、HTML ファイルは変わりません。なぜ必要か
具体例
// 要素を探す
const list = document.querySelector("#todo-list");
const input = document.querySelector("#todo-input");
// 要素を作って木にぶら下げる
document.querySelector("#add").addEventListener("click", () => {
const li = document.createElement("li");
li.textContent = input.value;
list.appendChild(li);
input.value = "";
});
// <a href="/glossary/class" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">クラス</a>の付け外しで見た目を変える
list.addEventListener("click", (e) => {
if (e.target.tagName === "LI") {
e.target.<a href="/glossary/classlist-toggle" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">classList.toggle</a>("done");
}
});つまずきやすいところ
document.querySelector が null を返してエラーになるのは、ほとんどが読み込み順の問題です。 に置いた は本文より先に走るため、まだ存在しない要素を探しに行きます。 を の直前に置くか defer を付けると解決します。もう一つ多いのが innerHTML にユーザーの入力をそのまま入れてしまう書き方で、これは入力に含まれたタグがそのまま解釈されるため XSS の入口になります。文字を入れたいだけなら textContent を使います。覚え方
次に学ぶ
TypeScriptとは?知識のつながり
サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。
LEARN BY DOING
この用語を、教材で使ってみる
直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。
この用語を扱うコース