JavaScriptでDOMはどうやって動いているのか?その背景事情
ブラウザが、HTMLを読み込むとDOM(Document Object Model、文書オブジェクトモデル)と呼ばれるデータ構造が作られます。
DOMはHTMLやXMLという文書のためのAPI(アプリケーションプログラミングインターフェイス)です。
このDOM APIを通して、JavaScriptは、HTMLの情報を取得したり、変更したりすることができます。
DOMを操作できるようになると、あらゆる面白いことをブラウザ上でできるようになるので、学んでいきましょう。
また、開発者として知っておきたい「JavaScriptでDOMはどうやって動いているのか?」その背景事情についてまとめました。
目次から読む
DOMとはなにか?
DOMというのは、JavaScriptのコードとブ ラウザの間で動くインターフェースのことです。もう少し詳しくいうと、ブラウザにレンダーされるHTMLドキュメントのことです。 JavaScriptはブラウザが常に必要というわけではありませんが、Webページを操作するときには、必ずDOMが関わってきます。JavaScriptでDOMを操作するとHTMLが書き換えられる?
JavaScriptが操作しているのは、あくまでもDOMであってHTML自体ではありません。 JavaScriptでHTMLを書き換えてもあくまでDOM上を書き換えているだけであって、元のHTMLはそのままということを理解しておきましょう。DOMの用語について
まずはDOMの用語について整理しておきましょう。<!DOCTYPE html>
<html>
<head>
<title>DOMについて</title>
</head>
<body>
DOMというのは...
</body>
</html>
まず、左のHTMLのDOMは右になります。
一つひとつのデータをNodeといいます。
そのNodeの塊が枝分かれしているので、そのデータ構造全体をNodeツリー(もしくはDOMツリー)といいます。
DOMでは改行と空白も一つのNodeとしてカウントされます。
documentとdoctype以外のhtmlの要素は、要素Node(もしくはElement Node)といいます。
テキストや空白・改行は、Text Nodeと呼ばれます。
親子関係を表すNodeでParent NodeとChild Nodeがあります。
Parent Nodeはたとえば、headからみたhtmlです。
Child Nodeは、headからみたtitleのことです。
また兄弟(Sibling)関係のNodeをあらわすSibling Node(シブリングノード)があります。
Sibling Nodeはたとえばhtmlの子Node同士は兄弟関係にあるので、headとbodyはsibling Nodeです。
DOMがあるからできること
DOMがあることで、JavaScriptとブラウザが相互作用できます。 相互作用というのは、JavaScriptでHTML要素を作ったり、変更したり、削除したりできるということです。 それだけでなく、スタイルを設定したり、クラスや属性もいじることができますし、クリックされたら何々するといったイベントを設定して反応することができます。 DOMツリーというのが、HTMLドキュメントから生成されます。 DOMはとても多くのメソッドとプロパティを持っているAPIで、それがゆえにDOMツリーと相互作用できます。Nodeについて
HTML要素はNodeという単位に分けられます。それはJavaScriptのオブジェクトがそれぞれのNodeの特別なメソッドやプロパティにアクセスします。(textContent,childNodes,parentNode,cloneNode())といったものがあります。 DOM APIは、Nodeに分けられます。そのNodeにはタイプがあります。- Element type
- Text type pタグなど
- Comment type コメントなど
- Document type
- innerHTML
- classList
- children
- parentElement
- append()
- remove()
- insertAdjacentHTML()
- querySelector()
- closest()
- matches()
- scrollIntoView()
- setAttribute()