0Pricing
HTML Academy · Урок

Использование template для отображения с JavaScript

Объединяйте шаблоны с циклами JavaScript для создания динамических списков

«Использование template для отображения с JavaScript» — бесплатный урок HTML Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Элемент template

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

Доступ к содержимому template

Содержимое template находится в объекте DocumentFragment по адресу template.content. Чтобы использовать его, клонируйте фрагмент: const clone = template.content.cloneNode(true). Аргумент true выполняет глубокое клонирование, включая все узлы-потомки.

Отрисовка экземпляров template

Настройте клон перед вставкой: выполните поиск внутри клона, задайте текстовое содержимое и добавьте обработчики событий. Затем добавьте его в DOM: container.appendChild(clone). Каждый вызов cloneNode() создаёт независимую копию — изменяйте одну копию, не затрагивая остальные.

const tmpl = document.getElementById("card-template");
function renderCard(data) {
  const clone = tmpl.content.cloneNode(true);
  clone.querySelector(".title").textContent = data.title;
  clone.querySelector(".body").textContent = data.body;
  container.appendChild(clone);
}

Отрисовка списков из template

Объединяйте template с Array.forEach или Array.map для отрисовки списков: для каждого элемента данных клонируйте template, подставляйте значения и добавляйте элемент в контейнер списка. Этот подход похож на фреймворк, но основан на стандартных HTML и JavaScript.

template для строк таблицы

Определите <template>, содержащий <tr> с ячейками. Клонируйте и заполняйте его для каждой строки данных. Это избавляет от конкатенации строк при создании HTML-кода — экранирование не требуется, поскольку Вы задаёте textContent, а не innerHTML.

Активация template выполняется явно

template никогда не отображается автоматически. Это позволяет безопасно хранить фрагменты, которые должны отображаться при определённых условиях: показывать template «нет результатов» только при пустом результате поиска, template ошибки — только при сбое сети, а скелетон загрузки — во время получения данных.

Вложенные template

template может содержать другие template — вложенные template остаются инертными внутри DocumentFragment внешнего template. Это позволяет создавать иерархии, похожие на компоненты: внешний template клонирует, а затем при необходимости активирует внутренние template.

Изолированные стили в template

Стили внутри тега <style> template не применяются к документу — они остаются инертными, пока template не будет создан, а его содержимое не переместится в активный DOM. Это позволяет template содержать собственные стили, не загрязняя страницу.

template и innerHTML

Разбор innerHTML — это синхронная обработка HTML-строки: HTML разбирается заново при каждом вызове. template.cloneNode() копирует уже разобранное дерево. При многократной отрисовке одной и той же структуры клонирование template выполняется быстрее и устраняет риски XSS, связанные с конкатенацией строк.

Ограничения привязки данных

Элемент template не имеет встроенной привязки данных — необходимо вручную находить и заполнять каждый клон. Для сложных задач привязки данных лучше подходит фреймворк или библиотека. template предназначен для простых подходов к ручной отрисовке без накладных расходов фреймворка.

Поддержка браузерами

Элемент template поддерживается всеми современными браузерами (IE11 поддерживал его частично). В средах, где требуется поддержка IE, добавьте полифилл, разбирая содержимое template при инициализации. В современных проектах используйте template без полифилла.

Проверка знаний

Почему для многократной отрисовки предпочтительнее использовать template.content.cloneNode(true), а не innerHTML?

Итоги

Элемент template содержит инертные, предварительно разобранные фрагменты HTML-кода. Клонирование template.content создаёт независимые экземпляры для ручной привязки данных. В сочетании с присваиванием textContent (без XSS) template позволяют создавать отрисовку списков, похожую на фреймворк, условный интерфейс и повторно используемые шаблоны HTML-кода, используя только стандартные API браузера.

Часто задаваемые вопросы

Урок «Использование template для отображения с JavaScript» бесплатный?

Да — полный текст урока «Использование template для отображения с JavaScript» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «Использование template для отображения с JavaScript»?

Объединяйте шаблоны с циклами JavaScript для создания динамических списков Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Использование template для отображения с JavaScript»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Элемент template: инертное содержимое
  2. Клонирование шаблонов с помощью cloneNode
  3. Использование template для отображения с JavaScript
  4. Шаблоны и безопасность innerHTML
← Назад к HTML Academy