JavaScript: DOM 入門

最終更新:2026-10-13

DOM は JavaScript と Web ページをつなぐ唯一の橋です。DOM がなければ、JS は純粋な計算言語でしかありません。DOM があれば、JS はページを「見て」、修正し、命を吹き込むことができます。

関連する DOM メソッド:document.getElementById() document.querySelector() document.createElement() querySelectorAll class

1. DOMツリーとdocumentオブジェクト

DOM は Document Object Model の略です。ブラウザが HTML を読み込むと、プレーンテキストとして保存するのではなく、オブジェクトツリーに変換します。各 HTML タグはオブジェクト(ノードと呼ばれる)になり、タグ間のネスト関係はツリーの親子関係になります。

DOM は逆さまの木のように考えてください。最も上には根(document)があり、枝分かれして幹(html、head、body)に、さらに葉(div、p、span...)へと続きます。

(2) DOM ツリー構造

シンプルな HTML ページの DOM ツリーはおおよそこのようになります。

HTML
document
  └── html
       ├── head
       │    ├── meta
       │    └── title
       └── body
            ├── h1
            ├── p
            └── div
                 └── span

(3) ノードタイプ

DOM には3つのコアノードタイプがあります。

ノードタイプ 説明 nodeType 値
要素ノード HTML タグ(例:p、div) 1
テキストノード タグ内のテキストコンテンツ 3
属性ノード タグの属性(例:class、id) 2(一般的な使用は非推奨)
HTML
<p class="intro">こんにちは世界</p>

この1行の中で:<p> は要素ノード、class="intro" は属性ノード、こんにちは世界 はテキストノードです。日常的な開発では、要素ノードが最も多く扱われます。

(4) document オブジェクト

document は DOM へのエントリポイントです。ブラウザがこのグローバルオブジェクトを自動的に提供します。これにより以下が可能です。

(5) DOM の役割

JS 自体は Web ページを「見る」ことはできません。計算することしかできません。DOM が「目」と「手」を提供します。

DOM がなければ、JS と HTML は完全に別々のものになります。DOM がそれらを接続します。


(6) サンプル:DOM 構造の確認

▶ 試してみよう

(7) サンプル:document オブジェクトの探索

▶ 試してみよう

(8) サンプル:ノードタイプの識別

▶ 試してみよう

関連する DOM メソッド:document.getElementById() document.querySelector() document.createElement() querySelectorAll class

❓ よくある質問

Q DOM は JavaScript の一部ですか?
A いいえ。DOM は W3C が定義した標準です。JavaScript はそれと対話するための API を提供しているだけです。Node.js には DOM がありません。なぜならブラウザ環境ではないからです。DOM と JS を混同するのは初心者によくある誤解です。
Q childNodes に空のテキストノードがあるのはなぜですか?
A HTML の改行やインデントは DOM ではテキストノードとして解析されます。例えば、2つのタグ間の空白はテキストノード(改行文字を含む)になります。要素ノードだけが必要な場合は、childNodes の代わりに children を使いましょう。
Q DOM の変更はページのパフォーマンスに影響しますか?
A はい。DOM の変更はすべてブラウザのリフローとペイントをトリガーできます。頻繁な DOM 操作はパフォーマンスのキラーです。ベストプラクティス:まずすべての変更をメモリ内で構築し、その後一括で DOM に書き込みましょう。

📖 まとめ

📝 練習問題

  1. ブラウザの DevTools(F12)を開き、コンソールに console.dir(document) と入力して、document オブジェクトのプロパティとメソッドを探索しましょう。認識できるか興味深いものを5つリストアップしてください。
  2. 現在のページの body 要素を取得し、その childElementCount(子要素の数)を出力してから、children を使ってすべての子要素をループし、それぞれのタグ名を出力するコードを書きましょう。
  3. 「要素ノード」と「テキストノード」の違いを説明してください。<div>こんにちは <b>世界</b></div> が与えられた場合、そのノードツリー構造を描き、各ノードのタイプをラベル付けしてください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%