CodeGym /Javaコース /Frontend SELF JA /テンプレートタグ

テンプレートタグ

Frontend SELF JA
レベル 10 , レッスン 5
使用可能

5.1 <template> タグ

HTMLの<template>タグは、ページ読み込み時には表示されず、JavaScriptを通して後で使用できるHTMLコードの断片を定義するためのものだよ。これはリストアイテムや製品カードとか、繰り返し出てくる構造を動的に生成・挿入するのに特に便利だね。

<template>要素は、ページにすぐには表示しないHTMLコードを格納するために使うよ。<template>の中身はページ読み込み時にはブラウザでレンダリングされないけど、DOM(Document Object Model)を通してアクセス可能で、JavaScriptを使って複製してドキュメントに挿入できるんだ。

構文:

HTML
    
      <template>
        <!-- テンプレートの内容 -->
      </template>
    
  

<template> タグの主な特徴

  1. 内容の非表示化: <template>タグ内の内容は、ページ読み込み時には表示されないよ。
  2. JavaScriptの使用: <template>タグの内容は、JavaScriptを通してDOMに複製・挿入できるよ。
  3. 遅延ロード: 必要な時にだけ内容をロード・表示することで、ページのパフォーマンスが向上できるんだ。

<template> タグの使用例

この例では、「Add Item」ボタンをクリックすると、新しいリストアイテムが作られて<ul>リストに追加されるよ。 新しいリストアイテムのテンプレートは<template>タグ内に定義されているよ。

HTML
    
      <button id="addButton">Add Item</button>
      <ul id="itemList"></ul>
      <template id="itemTemplate">
        <li class="item">This is a new item</li>
      </template>
    
  
JavaScript
    
// DOM内で使用する要素への参照を取得する
const addButton = document.getElementById('addButton'); // 「追加」ボタン
const itemList = document.getElementById('itemList'); // アイテムを追加するリスト
const itemTemplate = document.getElementById('itemTemplate'); // リストアイテムのテンプレート

// 「追加」ボタンにイベントリスナーを追加する
addButton.addEventListener('click', () => {
  // リストアイテムテンプレートの内容を複製する
  const newItem = itemTemplate.content.cloneNode(true); // trueは全ての子要素を含めて深く複製することを意味するよ

  // 新しいアイテムをリストに追加する
  itemList.appendChild(newItem); 
});
    
  

5.2 例: 商品カードの生成

<template>とJavaScriptを使って、例えば商品のカード一覧を生成できるよ。

<template> タグの使用例:

HTML
    
      <h1>商品一覧</h1>
      <div id="productList"></div>
      <template id="productTemplate">
        <div class="item">
          <h2 class="title"></h2>
          <p class="description"></p>
          <span class="price"></span>
        </div>
      </template>
    
  
JavaScript
    
// スクリプトの実行前にDOMが完全に読み込まれるのを待つ
document.addEventListener('DOMContentLoaded', () => {
  // 商品データの配列
  const products = [
    { title: '商品 1', description: '商品 1 の説明', price: '100 ドル' },
    { title: '商品 2', description: '商品 2 の説明', price: '200 ドル' },
    { title: '商品 3', description: '商品 3 の説明', price: '300 ドル' },
  ];

  // DOM内の要素への参照を取得する
  const productList = document.getElementById('productList'); // 商品リストのコンテナ
  const template = document.getElementById('productTemplate').content; // 商品要素のテンプレート

  // 商品配列をループし、各商品の要素をリストに作成する
  products.forEach(product => {
    // 商品テンプレートを複製する
    const clone = document.importNode(template, true); // true - 深い複製

    // 複製されたテンプレートにデータを埋め込む
    clone.querySelector('.title').textContent = product.title;
    clone.querySelector('.description').textContent = product.description;
    clone.querySelector('.price').textContent = product.price;

    // 埋め込まれたテンプレートを商品リストに追加する
    productList.appendChild(clone);
  });
});
    
  

説明

  • <template>タグ: ページ読み込み時に表示されないHTMLコードを含んでいるよ。
  • document.importNode(template, true)メソッド: テンプレートの内容を複製するよ。
  • querySelectortextContentメソッド: 複製されたテンプレートの内容を変更してドキュメントに挿入する前に使うんだ。

5.3 <template> タグの利点

パフォーマンスの向上

テンプレートを使うことで、後で使うHTMLコードを事前に読み込める。これにより、テンプレートの内容はレンダリングされず、ページの初期読み込みには影響しないのでパフォーマンスが向上できるんだ。

動的コンテンツの簡素化

テンプレートは動的コンテンツの生成を簡素化する。JavaScriptを使ってプログラム的にHTMLコードを生成する代わりに、予め用意しておいたテンプレートを複製・修正するだけで済むんだ。

使いやすさと読みやすさ

テンプレートを使うことでコードがより読みやすく、構造化される。同じような要素のHTMLコードを別に保存できるので、JavaScriptに埋め込む必要がないんだ。

条件付きコンテンツ表示の例:

HTML
    
      <h1>操作結果</h1>
      <div id="messageContainer"></div>

      <template id="messageTemplate">
        <div class="message">
          <p class="content"></p>
        </div>
      </template>
    
  
JavaScript
    
document.addEventListener('DOMContentLoaded', () => {
  // DOM内の要素への参照を取得する
  const messageContainer = document.getElementById('messageContainer'); // メッセージ用コンテナ
  const template = document.getElementById('messageTemplate').content; // メッセージテンプレート

  // メッセージを表示する関数
  function showMessage(type, text) {
    // メッセージテンプレートを複製する
    const clone = document.importNode(template, true); // true - 深い複製

    // クローン内のメッセージ要素を取得
    const messageDiv = clone.querySelector('.message');

    // メッセージのタイプ(success または error)に応じてクラスを追加
    messageDiv.classList.add(type);

    // メッセージのテキストを設定
    messageDiv.querySelector('.content').textContent = text;

    // コンテナにメッセージを追加
    messageContainer.appendChild(clone);
  }

  // メッセージを表示するために関数を呼び出す
  showMessage('success', '操作が成功しました!');
  showMessage('error', '操作中にエラーが発生しました。');
});
    
  

説明:

  • 関数showMessage(): メッセージのタイプ(成功またはエラー)とテキストを受け取り、テンプレートを複製してメッセージコンテナに追加するよ。
  • クラス.success.error: メッセージのタイプに応じて複製されたテンプレートに適用されるスタイルだよ。
1
Опрос
HTML5のセマンティックタグ,  10 уровень,  5 лекция
недоступен
HTML5のセマンティックタグ
HTML5のセマンティックタグ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION