Современные веб-приложения используют DOM-манипуляции для динамического изменения областей страницы или вставки значений. Типичным примером является таблица цифр; исходная страница может возвращать заголовки столбцов HTML, а затем инициализировать запрос Ajax, который возвращает несколько записей данных. Затем данные добавляются в таблицу — но как? У разработчика есть два варианта:
- JavaScript используется для построения строк строк HTML или фрагментов DOM, которые добавляются в таблицу. Это кажется простым до тех пор, пока вам не понадобится внести изменения, и вам не придется искать код JavaScript, связанный с вашим JavaScript. Чтобы упростить жизнь, разработчики часто возвращают целые фрагменты HTML-строки из вызова Ajax, но это делает полезную нагрузку более многословной и открывает потенциал для атак с использованием межсайтовых сценариев.
- В качестве альтернативы вы создаете пустую первую строку на странице HTML, которая используется в качестве шаблона для всех остальных строк. Это должно быть проще в обслуживании, но вам нужно удалить его из DOM или оформить его с помощью display: ни одного, чтобы гарантировать, что он не появится.
Ни одно из решений не является особенно элегантным.
К счастью, W3C представил новый тег template
который предоставляет механизм для определения фрагментов HTML-разметки как прототипов. (Возможно, это также успокоит тех, кто расстроен кончиной элемента hgroup !)
По сути, шаблон может использоваться для вставки фрагментов HTML-кода на вашу страницу, например
<template id="mytablerow">
<tr>
<td class="record"></td>
<td></td>
<td></td>
</tr>
</template>
Код template
head
body
frameset
Тем не мение:
- шаблоны не будут отображаться
- шаблоны не считаются частью документа, т.е. использование document.getElementById («mytablerow») не будет возвращать дочерние узлы
- шаблоны не используются до тех пор, пока они не будут использованы, т. е. вложенные изображения не будут загружаться, медиа не будут воспроизводиться, сценарии не будут запускаться и т. д.
Использование шаблонов
Чтобы использовать шаблон, его необходимо клонировать и вставить в DOM. Например, предполагая следующий HTML:
<table id="mytable">
<thead>
<tr>
<td>ID</td>
<td>name</td>
<td>twitter</td>
</tr>
</thead>
<tbody>
<!-- rows to be appended here -->
</tbody>
</table>
<!-- row template -->
<template id="mytablerow">
<tr>
<td class="record"></td>
<td></td>
<td></td>
</tr>
</template>
Мы можем клонировать новую строку в JavaScript:
// fetch tbody and row template
var t = document.querySelector("#mytable tbody"),
row = document.getElementById("mytablerow");
// modify row data
var td = row.getElementsByTagName("td");
td[0].textContent = "1";
td[1].textContent = "SitePoint";
td[2].textContent = "sitepointdotcom";
// clone row and insert into table
t.appendChild(row.content.cloneNode(true));
Важный вопрос: можем ли мы использовать шаблоны тегов?
Вероятно, не только пока. Он поддерживается в последних версиях ночных Chrome и Firefox. Opera будет поддерживать тег, когда он переключается на Blink . Пока нет слов от команд IE и Safari, но на JSfiddle был продемонстрирован шаблон shim, если вы хотите поддерживать все браузеры.
Лично я думаю, что тег template
Это просто и стандартизирует методы создания шаблонов для разработчиков HTML5.