DOMで遊んでみる
DOMについて
- DOM(Document Object Model)
- プラットフォームに中立的なイベント・ノードツリーのモデル
DOMの仕様
- W3C DOM4
- DOM Standard ( “DOM4” ) 日本語訳
DOMとHTML
HTMLはツリー構造でありDOMで表現できる。例えば以下のHTMLは以下のような構成(図)になる。
<html> <head></head> <body> <h1>HelloWorld</h1> </body> </html>
ChromeでDOMを確認する
空のHTMLファイル
空のHTMLファイルを作成する。(empty.html
)
Chromeで開き、デベロッパーツール(Ctrl+Shft+I)で確認してみる。
ファイルの中身は空のはずなのにElementが作成されている。HTMLの最小構成ということだろうか。
閉じたツリー
以下のような閉じたツリーは作れるだろうか
bodyの下にbodyを付けてみたがDOMException
がthrowされてしまった。
DOMを操作するAPI
ルートノード取得
document.getRootNode()
IDを指定してノード取得
var elm = document.createElement("div"); elm.id = 'elm_id'; document.body.append(elm); document.getElementById('elm_id');
クラスを指定してノード取得
var div = document.createElement("div"); div.classList.add("test_class"); document.body.appendChild(div); document.getElementsByClassName("test_class");
CSSセレクタを指定してノード取得
// 1件取得 document.querySelector(".test_class"); // 全件取得 document.querySelectorAll(".test_class")
ノードの作成
var elm = document.createElement("div");
子ノードに追加
var elm = document.createElement("div"); document.body.appendChild(elm);
ノードの削除
var div = document.createElement("div"); document.body.appendChild(div); // 子要素の削除 document.body.removeChild(div);
DOMとイベント
TODO
キャプチャフェーズ
- ターゲットフェーズ
- バブリングフェーズ
DOMとCSS
HTMLElement.styleプロパティにCSSStyleDeclarationオブジェクトとして格納されている。
ただしstyleプロパティはインラインstyle属性で設定されたCSS宣言のみしか取得できない。
document.body.style.cssText = "color: red"; document.body.style.color = "red"
外部のCSSファイルから適用されたCSSプロパティも含めた値を取得する場合は以下
window.getComputedStyle(document.body, null);