0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DOMの仕組みと構造を知る

Last updated at Posted at 2023-10-10

なぜ知る必要があるか?

JavaScriptを使ってWebページに動きを付けるには、DOMの操作が必要。でもその前に、DOMの仕組みと構造を知らないと、どうやって操作したら良いか混乱する

DOMとは何か?

「Document Object Model」の略で、Webページ全体のコンテンツはオブジェクトだった。そして、JavaScriptから特定のオブジェクトにアクセスすれば、Webページに動きを付けることが出来る
つまりDOMは、JavaScriptからHTMLの「どこ」に「何」をするかを実現するための仕組みである

DOMはどんな特徴があるか?

①枝分かれした木構造になっている(DOMツリーと呼ぶ)

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript basics</title>
  </head>
  <body>
    <ul id="list">
    </ul>
    <input id="input_text" type="text">
    <input id="button" type="button" value="Add!">
    <script src="main.js"></script>
  </body>
</html>

[index.html]のHTMLタグを、DOMツリーとして表現したもの

document(ドキュメントノード)
  └── html(要素ノード)
       ├── head
       │    ├── meta ─── charset(属性ノード)
       │    ├── meta ─── http-equiv ─── content
       │    ├── meta ─── name ─── content
       │    └── title
       │          └── #text JavaScript basics(テキストノード)
       └── body
            ├── ul ─── id
            ├── input ─── id ─── type
            ├── input ─── id ─── type ─── value
            └── script

要素タグや要素内の属性などは、オブジェクトでありDOMツリーとして構成されていた

②HTMLの各要素をノードとして扱う
DOMツリーではHTMLの各要素をノードと呼んでいる

・ドキュメントノード
全体を表すdocumentオブジェクト(DOMツリーだと根の部分)
・要素ノード
要素を表すオブジェクト(DOMツリーだと、document配下で起点となる部分)
・テキストノード
要素内のテキストを表すオブジェクト(DOMツリーだと、要素ノードに設定したテキスト)
・属性ノード
要素の属性を表すオブジェクト(DOMツリーだと横棒の部分)
・コメントノード
コメントを表すノード

※DOMツリーの位置に応じて各ノードの関係がある
・ルートノード
・親ノード
・子ノード
・子孫ノード
・兄弟ノード

document
  └── html
       ├── head
       │    ├── meta ─── charset(属性ノード)
       │    ├── meta ─── http-equiv ─── content
       │    ├── meta ─── name ─── content
       │    └── title
       │          └── #text JavaScript basics
       └── body
            ├── ul ─── id
            ├── input ─── id ─── type
            ├── input ─── id ─── type ─── value
            └── script

上記のhtml要素の場合、documentの子ノードで、headとbodyの親ノードである

調べてみて分かったこと

HTMLで指定した要素や属性は全てオブジェクトとして扱われ、JavaScriptでオブジェクトを指定してWebページに動きを付ける必要がある。
DOMツリーのノードを操作するメソッドが多いので、指定方法に困ったらDOMを確認した方が良さそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?