JS

DOM

初級

読み方:ドム|英語:DOM

Document Object Model の略で、ブラウザがHTMLを操作できる部品として管理する仕組みだよ。

やさしい説明

DOM(ドム)とは、HTMLをJavaScriptから操作するための仕組みです。

Document Object Model の略。ブラウザがHTMLを読み込むと、要素をツリー構造(木の枝のような構造)で管理します。JavaScriptはこのツリーを操作してページの内容を変更します。

「ボタンをクリックしたら文字が変わる」「フォームに入力した内容をリアルタイム表示する」——これらはすべてDOMを操作することで実現しています。

図解

DOMツリーの構造

具体例・使い方

// 要素を取得
const btn = document.getElementById("myBtn");
const items = document.querySelectorAll(".item"); // 複数取得

// テキストを変更
btn.textContent = "クリック済み";

// スタイルを変更
btn.style.backgroundColor = "green";
btn.classList.add("active"); // クラスを追加

// 新しい要素を追加
const p = document.createElement("p");
p.textContent = "新しい段落";
document.body.appendChild(p);

// 要素を削除
btn.remove();

要素の取得方法の使い分け

  • getElementById("id") — IDで1つ取得。最も高速
  • querySelector("セレクタ") — CSSセレクタで最初の1つを取得
  • querySelectorAll("セレクタ") — CSSセレクタで全て取得(NodeList)
  • getElementsByClassName("class") — クラス名で取得(HTMLCollection)

現代では querySelector / querySelectorAll が最もよく使われます。CSSと同じセレクタ記法で書けるため、".card""#title""input[type='text']" のように柔軟に要素を指定できます。

いつ使う?

ボタンをクリックしたら文字を変える、フォームの入力値を取得する、要素を追加・削除する——JavaScriptでページを動的に変更するときは常にDOMを操作しています。

間違いやすいポイント

❌ HTMLが読み込まれる前にDOM操作する

<head> の中に <script> を書くと、HTMLがまだ読み込まれていないため要素が null になります。<body> の末尾に書くか、DOMContentLoaded イベントを使いましょう。

// ❌ headにscriptを書くと要素がまだない
document.getElementById("btn"); // null!

// ✅ bodyの最後にscriptを書くか、DOMContentLoadedを使う
document.addEventListener("DOMContentLoaded", () => {
  const btn = document.getElementById("btn"); // OK
});

// ✅ scriptタグにdeferを付ける(HTML解析後に実行される)
// <script src="main.js" defer></script>

よくある疑問

Q: DOMとHTMLの違いは?

A: HTMLはファイルに書かれたコード、DOMはブラウザがHTMLを解釈して作ったオブジェクトです。JavaScriptはDOMを操作します。

Q: 要素を取得する方法は?

A: document.querySelector('.class') が最も汎用的です。IDならdocument.getElementById('id')も使えます。

Q: DOM操作でnullエラーが出るのはなぜ?

A: 要素が見つからないとnullが返ります。IDのスペルミス、またはHTML読み込み前にスクリプトが実行されているのが原因です。

関連用語

  • イベント — DOMの要素にイベントリスナーを追加して操作を検知する
  • HTML — DOMはHTMLをブラウザが読み込んで作るツリー構造
  • ブラウザ — DOMはブラウザが提供する仕組み
  • セレクタ — querySelectorではCSSセレクタで要素を指定する

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A