【どむ】

DOM(ドキュメントオブジェクトモデル) とは?

💡 HTMLをJavaScriptで操作するための「リモコン」
📌 このページのポイント
DOMツリー構造 document <html> <head> <body> <title> <meta> <h1> <div> <p> <span> HTMLドキュメントはツリー状の親子関係で構成される
DOMツリー:HTMLの要素が親子関係で階層的に構造化される
ひよこ ひよこ

DOMっていつ作られるの?

ペンギン先生 ペンギン先生

ブラウザHTMLファイルを読み込んだ瞬間に、HTMLのタグ構造をもとにDOMツリーが構築される。html タグが根っこで、head と body が枝分かれして、さらにその中の要素が葉っぱになる木構造をイメージするとわかりやすい。

ひよこ ひよこ

ReactとかVueを使うときもDOMを直接触るの?

ペンギン先生 ペンギン先生

基本的には直接触らない。ReactVue仮想DOMを使って効率的にDOMを更新してくれる。でもDOMの仕組みを理解していないとデバッグで困るし、ライブラリなしの素のJavaScript(Vanilla JS)を理解するにも必須の知識。

ひよこ ひよこ

DOM操作が重いってどういうこと?

ペンギン先生 ペンギン先生

DOMの変更があるとブラウザは「レイアウト計算→描画」をやり直す。1000個の要素を1個ずつ変更すると1000回やり直しになる。だからReactのような仮想DOMは変更をまとめて最小限のDOM操作で済ませる工夫をしている。

ひよこ ひよこ

DOMの変更をリアルタイムに監視する方法ってあるの?

ペンギン先生 ペンギン先生

MutationObserverというAPIがあるよ。特定の要素の子要素が追加・削除されたり属性が変わったりしたときにコールバックを呼んでくれる。SPAで動的にコンテンツが変わるページの監視や、Chrome拡張機能の開発でよく使われるんだ。

ひよこ ひよこ

ブラウザの開発者ツールでDOMを触れるって本当?

ペンギン先生 ペンギン先生

本当だよ。DevToolsのElementsパネルでDOMツリーをリアルタイムに確認・編集できる。実はConsoleから document.querySelector('.header').style.color = 'red' と打てばヘッダーの色が即座に変わる。デバッグだけでなく、他サイトのレイアウトを研究するときにも便利なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
DOMって出てきたら「HTMLJavaScriptから操作するためのツリー構造」と思えばだいたいOK!
📖 おまけ:英語の意味
「Document Object Model」 = 文書オブジェクトモデル
💬 HTML文書(Document)をオブジェクト(Object)の木構造(Model)として扱うAPI仕様
← 用語集にもどる