📑

【初学者によるまとめ】この一冊で全部わかるWeb技術の基本 「Chapter 4」>「06 DOM」

2024/12/19に公開

目的:「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめ、Qiitaへアウトプットして理解力の向上に努める。

注意点
🤔 ←この絵文字の文章は個人的な見解になります。的外れなこともあるかと思います。
例)🤔<(感想、考察、疑問点など)

(参考書籍)

  1. イラスト図解式 この一冊で全部わかるWeb技術の基本

(参考サイト)

  1. Udemyメディア
  2. MDN

スクリプトからHTMLを操作する仕組み

サンプルコード

(例1:DOM操作を行っているサンプルコード(chatGPTより生成))

index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM操作のサンプル</title>
<style>
    .highlight {
        background-color: yellow;
    }
</style>
</head>
<body>
    <h1 id="main-heading">DOM操作のサンプル</h1>

    <p id="paragraph">この段落のテキストを変更します。</p>

    <button id="add-button">新しい要素を追加</button>

    <!-- JavaScriptファイルの読み込み -->
    <script src="script.js"></script>
</body>
</html>
script.js
// ボタン要素を取得
const addButton = document.getElementById('add-button');

// ボタンにクリックイベントを追加
addButton.addEventListener('click', function() {
    // 新しい要素を作成
    const newElement = document.createElement('p');
    newElement.textContent = '新しい段落が追加されました!';

    // 新しい要素を既存の段落の後に挿入
    const paragraph = document.getElementById('paragraph');
    paragraph.insertAdjacentElement('afterend', newElement);

    // 新しい要素にクラスを追加してスタイルを適用
    newElement.classList.add('highlight');
});

このサンプルコードでは、次のことが行われています:

  1. id 属性を使用してHTML要素を識別し、JavaScriptで取得しています。
  2. ボタン要素にクリックイベントを追加し、そのイベントが発生したときに新しい段落要素を作成しています。
  3. createElement メソッドを使用して新しい要素を作成し、textContent を設定してその中身を定義しています。
  4. insertAdjacentElement メソッドを使用して、既存の段落要素の後に新しい段落要素を挿入しています。
  5. 新しい要素に classList.add メソッドを使用してクラスを追加し、スタイルを適用しています(この例では highlight クラスが追加され、背景色が黄色になります)。

このようにして、JavaScriptを使用してHTMLの要素を動的に変更、追加、または削除することができます。

概要

  • 昨今のほとんどのWebブラウザでDOMが使用可能となっている
    • 一見接点が無いマークアップ言語とクライアントスクリプトがDOMというAPIを介してやり取りが可能となっている
  • DOMによって「マークアップ言語で生成されたWebページ上の内容を動的に読み取りや編集などの操作を可能」にしている
    • DOMはAPIである点を覚えておく

(画像1:DOMの立ち位置)
20240717_001024_書類_000056.jpg

  • DOM は W3C によって標準化されており、また実装機能によって Level1 ~ Level3 にレベル分けされている

対象となる文書を階層構造として扱う

  • DOMでは対象とするWeb文書の各要素を抽出する際に、それらを階層構造と見なして扱う
    • DOMが階層構造と見なすそれら要素が"木のような根と枝分かれの構造"をしていることからDOMツリーと呼ぶ
  • DOMツリーが多くなればなるほど処理時間が多くかかってしまう点が難点

(サンプルコード1:入れ子構造のHTML)

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOMツリーの例</title>
</head>
<body>
    <header>
        <h1>Welcome to our website</h1>
        <nav>
            <ul>
                <li><a href="#home">Home</a></li>
                <li><a href="#about">About</a></li>
                <li><a href="#services">Services</a></li>
                <li><a href="#contact">Contact</a></li>
            </ul>
        </nav>
    </header>
    <section id="home">
        <h2>Home</h2>
        <p>This is the homepage content.</p>
    </section>
    <section id="about">
        <h2>About Us</h2>
        <p>Learn more about our company.</p>
    </section>
    <section id="services">
        <h2>Our Services</h2>
        <ul>
            <li>Service 1</li>
            <li>Service 2</li>
            <li>Service 3</li>
        </ul>
    </section>
    <footer>
        <p>&copy; 2024 Company Name. All rights reserved.</p>
    </footer>
</body>
</html>

(サンプルコード2:DOMツリー)

Document
└── html
    ├── head
    │   ├── meta
    │   └── title
    ├── body
    │   ├── header
    │   │   ├── h1
    │   │   └── nav
    │   │       └── ul
    │   │           ├── li
    │   │           ├── li
    │   │           ├── li
    │   │           └── li
    │   ├── section#home
    │   │   ├── h2
    │   │   └── p
    │   ├── section#about
    │   │   ├── h2
    │   │   └── p
    │   └── section#services
    │       ├── h2
    │       └── ul
    │           ├── li
    │           ├── li
    │           └── li
    │
    └── footer
        └── p

(画像2:DOMツリー)
20240717_010129_書類_000058.jpg

  • DOMツリーにおいて起点となる'html'要素を"根"
    html直下に含まれる要素群をそれぞれ'葉'とみなして「木構造」としている
    • "html"要素を「ルート」
    • 他の子要素を「ノード」

Discussion