Кратко
СкопированоТег <template>
– (от английского template – шаблон) используется как контейнер для хранения HTML-кода для дальнейшего использования в JavaScript.
Пример
Скопировано<template> <div class="card"> <h2 class="card__title"></h2> <div class="card__content"></div> </div></template>
<template> <div class="card"> <h2 class="card__title"></h2> <div class="card__content"></div> </div> </template>
Как понять
СкопированоВ <template>
может храниться любая корректная HTML-разметка, в том числе стили и скрипты. Браузер будет проверять HTML-синтаксис, но содержимое тега <template>
не будет отображаться на странице.
Если в шаблоне содержатся скрипты, они не выполнятся, а стили не применятся, пока содержимое шаблона не поместить на страницу.
Для того, чтобы использовать содержимое шаблона в документе нужен JavaScript.
Атрибуты
СкопированоК тегу <template>
можно применить все глобальные атрибуты.
Как использовать
СкопированоТег <template>
имеет свойство content
, которое доступно только для чтения. По нему можно получить доступ к содержимому шаблона.
if (document.createElement('template').content) { /* Код выполнится, если браузер поддерживает <template> */} else { /* Нужно придумать что-то другое */}
if (document.createElement('template').content) { /* Код выполнится, если браузер поддерживает <template> */ } else { /* Нужно придумать что-то другое */ }
Наглядный пример
СкопированоИмеем HTML-разметку с контейнером для списка покупок и шаблон элемента списка, завёрнутого в <template>
:
<div> <h2>Список покупок</h2> <ul class="list"> </ul> <template id="template"> <li></li> </template></div>
<div> <h2>Список покупок</h2> <ul class="list"> </ul> <template id="template"> <li></li> </template> </div>
Использование шаблона с помощью JavaScript:
const list = document.querySelector('.list')const template = document.querySelector('#template')// Клонируем содержимое тега <template>const item = template.content.cloneNode(true)// Находим тег <li> и помещаем текст внутрьitem.querySelector('li').textContent = 'Молоко'// Вставляем склонированный контент на страницуlist.append(item)
const list = document.querySelector('.list') const template = document.querySelector('#template') // Клонируем содержимое тега <template> const item = template.content.cloneNode(true) // Находим тег <li> и помещаем текст внутрь item.querySelector('li').textContent = 'Молоко' // Вставляем склонированный контент на страницу list.append(item)
Подсказки
Скопировано💡 В <template>
могут находиться даже те теги, которые в обычной жизни не используются без родительского контейнера, такие как <li>
или <tr>
.
<template> <li></li></template><template> <tr> <td></td> </tr></template>
<template> <li></li> </template> <template> <tr> <td></td> </tr> </template>