Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. HTML
  3. Справка по HTML
  4. Элемент
  5. <template>

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

<template>: элемент шаблона контента

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨ноябрь 2015 г.⁩.

* Some parts of this feature may have varying levels of support.

HTML-элемент шаблона контента<template> — это механизм для отложенного создания клиентского контента, который не отображается во время загрузки страницы, но может быть инициализирован при помощи JavaScript.

Шаблон можно представить себе как фрагмент контента страницы, сохранённый для последующего использования в документе. Хотя парсер и обрабатывает содержимое элемента<template> во время загрузки страницы, он делает это, только чтобы убедиться в валидности содержимого, само содержимое при этом не отображается.

Категории контентаМетаданные,основной поток,фразовый контент,элементы поддержки скриптов
Допустимый контентНет ограничений
Пропуск теговНет, открывающий и закрывающий теги обязательны.
Допустимые родителиЛюбые элементы, которые могут содержатьметаданные,фразовый контент илиэлементы поддержки скриптов. Допускается вкладывать элемент в<colgroup>, у которогоотсутствует атрибутspan.
Неявные ARIA-ролиНет соответствующей роли
Допустимые ARIA-ролиНет
DOM-интерфейсHTMLTemplateElement

Атрибуты

Элемент может иметьобщие атрибуты.

Однако уHTMLTemplateElement есть свойствоcontent, которое возвращает доступный только для чтенияDocumentFragment, содержащий DOM-поддерево шаблона. Обратите внимание, что прямое использование значенияcontent может привести к непредсказуемому поведению, см. разделловушкаDocumentFragment ниже.

Примеры

Начнём с HTML.

html
<table>  <thead>    <tr>      <td>UPC_Code</td>      <td>Product_Name</td>    </tr>  </thead>  <tbody>    <!-- данные будут вставлены сюда -->  </tbody></table><template>  <tr>    <td></td>    <td></td>  </tr></template>

Для начала у нас есть таблица, в которую мы собираемся вставить контент с помощью Javascript. За таблицей следует шаблон, который описывает структуру HTML-фрагмента — строку таблицы.

Теперь, когда таблица была создана, а шаблон определён, используем JavaScript, чтобы вставить строки в таблицу. Каждая строка будет строиться по шаблону.

js
// Убеждаемся, что браузер поддерживает тег <template>,// проверив наличие атрибута content у элемента template.if ("content" in document.createElement("template")) {  // Находим элемент tbody таблицы  // и шаблон строки  var tbody = document.querySelector("tbody");  var template = document.querySelector("#productrow");  // Клонируем новую строку и вставляем её в таблицу  var clone = template.content.cloneNode(true);  var td = clone.querySelectorAll("td");  td[0].textContent = "1235646565";  td[1].textContent = "Stuff";  tbody.appendChild(clone);  // Клонируем новую строку ещё раз и вставляем её в таблицу  var clone2 = template.content.cloneNode(true);  td = clone2.querySelectorAll("td");  td[0].textContent = "0384928528";  td[1].textContent = "Acme Kidney Beans 2";  tbody.appendChild(clone2);} else {  // Иной способ заполнить таблицу, потому что  // HTML-элемент template не поддерживается.}

Как результат имеем HTML-таблицу с двумя новыми строками, добавленными с помощью #"ловушка_documentfragment" >

ЛовушкаDocumentFragment

DocumentFragment не подходит в качестве целевого объекта для многих событий, поэтому предпочтительнее клонировать или ссылаться на элементы внутри него.

Рассмотрим следующие HTML-разметку и JavaScript-код:

HTML

html
<div></div><template>  <div>Click me</div></template>

JavaScript

js
const container = document.getElementById("container");const template = document.getElementById("template");function clickHandler(event) {  event.target.append(" — Clicked this div");}const firstClone = template.content.cloneNode(true);firstClone.addEventListener("click", clickHandler);container.appendChild(firstClone);const secondClone = template.content.firstElementChild.cloneNode(true);secondClone.addEventListener("click", clickHandler);container.appendChild(secondClone);

Результат

В переменнойfirstClone у нас экземпляр (клон)DocumentFragment, и хотя у нас получилось отрисовать его внутри контейнера, клик по нему не срабатывает. В переменнойsecondClone у нас экземпляр (клон)HTMLDivElement, клик по которому работает как ожидается.

Спецификации

Specification
HTML
# the-template-element

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp