フロントエンドの複雑な処理や、サーバーと通信して情報を送受信するなど、JavaScriptでできることはさまざまあり、Webページを動かすために必要不可欠なプログラミング言語です。
例えば、画像のスライドショーやモーダルウィンドウなど、ブラウザ上に表示されている画面に動きを付けるといったイメージが思い浮かぶのではないでしょうか。
しかし、これらの処理を行うためには、単にJavaScriptで関数が書ければ良いというわけではなく、DOMという知識が必要になります。
そこで今回は、JavaScriptを扱ううえで必須の知識であるDOMの考え方について解説していきます。
DOMとは
「DOM」とは、Document Object Modelの略で、HTMLドキュメントをプログラムから利用するためのAPIです。HTMLドキュメントの構造を表現し、ブラウザとのやり取りをして、表示結果をコントールします。
もう少しかんたんに説明すると、HTMLドキュメントの中の「何処」に変更を与えるのか指定し、任意のプログラムを実装することができるということです。
DOMの階層構造
DOMは、枝分かれした木の性質をイメージするように、「ツリー」と呼ばれる構造を持っています。その構造のことを「DOMツリー」と呼びます。実際には、HTMLドキュメントの要素をDOMツリーで表現して取り扱うイメージです。
HTMLドキュメントに書かれている要素は、DOMツリーの中では「ノード」とも呼ばれ、親ノードや子ノードなどと分別されます。
DOMツリーは以下のような構造になっています。
/* DOMツリーの構造 */ /* document - html - head - title - meta - style - body - h1 - h2 - div - h3 - p - img */
最上位のノードはdocumentです。さらに、htmlがdocumentの子ノードとなり、headが孫ノードとなります。もし、bodyを基準に考えるとしたら、h1が子ノードで、headは兄弟(姉妹)ノードです。
これら全てを包括している最上位のノードのことを「ルートノード」と呼びます。ここではdocumentがルートノードとなります。
要素の取得
DOMの最上位にあるdocumentは、HTMLドキュメント全体を表すオブジェクトです。
Documentオブジェクトを用いることで、DOMツリーのノードつまり要素を取得することが可能できます。
Documentオブジェクトを使用したノードの取得方法は以下です。
getメソッド
・document.getElementById:指定されたID属性が持つ要素を取得
・document.getElementsByClassName:指定されたClass属性が持つすべての要素を取得
・document.getElementsByTagName:指定されたタグを持つすべての要素を取得
セレクター
・document.querySelector:指定されたセレクターに合致する文書中のはじめの要素を取得
・document.querySelectorAll:指定されたセレクターに合致する文書中のすべての要素を取得
DOMの操作
ここまでで要素の取得方法が分かったので、実際にDOMの操作をしていきます。
ここでは、それぞれの要素が持っているinnerHTMLとtextContentというプロパティも使用します。innerHTMLとtextContentは、要素内のテキストにアクセスすることができます。
getメソッドを使用した場合
HTML
<h1>JavaScriptを扱うなら必須の知識。DOMの考え方を解説</h1> <h2>要素の取得</h2> <h2>DOMの操作</h2> <p id="text"></p>
JavaScript
const getText = document.getElementById('text'); getText.textContent = 'DOMの操作中です';
実装結果
HTMLの「<p id=”text”></p>」をみると、テキストは空です。
JavaScriptの「document.getElementById(‘text’)」により、textというid属性を持つ要素の取得ができます。また、「textContent」というプロパティを用いることで、任意のテキストを出力することが可能です。
その結果、「DOMの操作中です」というテキストが表示されています。
ここでは分かりやすいようにcssに「#text {color: red; }」と指定し、赤文字にしています。
セレクターを使用した場合
HTML
<button>ボタンです</button> <button>ボタンです</button> <button>ボタンです</button>
JavaScript
const getButton = document.querySelector('button'); getButton.innerHTML = '1番目のボタンです';
実行結果
HTMLのbuttonタグにはすべて「ボタンです」というテキストが入っています。
JavaScriptの「document.querySelector(‘button’)」により、HTMLの中のすべてのbuttonタグの中から、はじめの要素のみ取得しています。
また、「innerHTML」というプロパティを用いることで、任意のテキストを出力することが可能です。
その結果、はじめのボタンのみ、「1番目のボタンです」というテキストが表示されています。
innerHTMLとtextContentの違い
innerHTMLとtextContentの違いが少し分かりにくいかもしれないので、補足します。
innerHTMLは、HTMLを解釈してテキストを出力するのに対し、textContentは、HTMLを解釈せずにそのままテキストを出力します。
例をみてみましょう。
HTML
<p id="p1"></p> <p id="p2"></p>
JavaScript
const p1 = document.getElementById('p1'); p1.innerHTML = '<innerHTMLです'; const p2 = document.getElementById('p2'); p2.textContent = '<textContentです>';
実装結果
innerHTMLは、HTMLを解釈するため、<b>タグの機能を反映します。そのため、「innerHTMLです」という太字のテキストが表示されています。
一方、textContentはHTMLを解釈しないため、<b>タグ自体を文字列として認識し、「<b>textContentです</b>」と、すべてテキスト表示されるのです。
まとめ
今回はJavaScriptには欠かせないDOMについて解説しました。
DOMの構造や要素へのアクセス方法を知ることは、JavaScriptでプログラムを実装するためには、とても重要な知識です。
JavaScriptの便利なライブラリとして、ReactやjQueryなどがありますが、どれもDOMとの関係性は深いため、今後こういったライブラリを活用していく場合にも、DOMの理解は欠かせません。
ぜひ、本記事を通してDOMの理解を深めていきましょう。
Javascript関連記事



