Baseline Widely available *
HTML-ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñаблона конÑенÑа <template>
â ÑÑо меÑ
анизм Ð´Ð»Ñ Ð¾Ñложенного ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑкого конÑенÑа, коÑоÑÑй не оÑобÑажаеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки ÑÑÑаниÑÑ, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð½Ð¸ÑиализиÑован пÑи помоÑи JavaScript.
Шаблон можно пÑедÑÑавиÑÑ Ñебе как ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð½ÑенÑа ÑÑÑаниÑÑ, ÑоÑ
ÑанÑннÑй Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² докÑменÑе. ХоÑÑ Ð¿Ð°ÑÑÐµÑ Ð¸ обÑабаÑÑÐ²Ð°ÐµÑ ÑодеÑжимое ÑлеменÑа <template>
во вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки ÑÑÑаниÑÑ, он Ð´ÐµÐ»Ð°ÐµÑ ÑÑо, ÑолÑко ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ Ð² валидноÑÑи ÑодеÑжимого, Ñамо ÑодеÑжимое пÑи ÑÑом не оÑобÑажаеÑÑÑ.
ÐÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð±Ñие аÑÑибÑÑÑ.
Ðднако Ñ
еÑÑÑ ÑвойÑÑво HTMLTemplateElement
, коÑоÑое возвÑаÑÐ°ÐµÑ Ð´Ð¾ÑÑÑпнÑй ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ content
, ÑодеÑжаÑий DOM-поддеÑево Ñаблона. ÐбÑаÑиÑе внимание, ÑÑо пÑÑмое иÑполÑзование знаÑÐµÐ½Ð¸Ñ DocumentFragment
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к непÑедÑказÑÐµÐ¼Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ, Ñм. Ñаздел ловÑÑка content
DocumentFragment
ниже.
ÐаÑнÑм Ñ HTML.
<table id="producttable">
<thead>
<tr>
<td>UPC_Code</td>
<td>Product_Name</td>
</tr>
</thead>
<tbody>
<!-- даннÑе бÑдÑÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑÑда -->
</tbody>
</table>
<template id="productrow">
<tr>
<td class="record"></td>
<td></td>
</tr>
</template>
ÐÐ»Ñ Ð½Ð°Ñала Ñ Ð½Ð°Ñ ÐµÑÑÑ ÑаблиÑа, в коÑоÑÑÑ Ð¼Ñ ÑобиÑаемÑÑ Ð²ÑÑавиÑÑ ÐºÐ¾Ð½ÑÐµÐ½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Javascript. Ðа ÑаблиÑей ÑледÑÐµÑ Ñаблон, коÑоÑÑй опиÑÑÐ²Ð°ÐµÑ ÑÑÑÑкÑÑÑÑ HTML-ÑÑагменÑа â ÑÑÑÐ¾ÐºÑ ÑаблиÑÑ.
ТепеÑÑ, когда ÑаблиÑа бÑла Ñоздана, а Ñаблон опÑеделÑн, иÑполÑзÑем JavaScript, ÑÑÐ¾Ð±Ñ Ð²ÑÑавиÑÑ ÑÑÑоки в ÑаблиÑÑ. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока бÑÐ´ÐµÑ ÑÑÑоиÑÑÑÑ Ð¿Ð¾ ÑаблонÑ.
// УбеждаемÑÑ, ÑÑо бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñег <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-ÑаблиÑÑ Ñ Ð´Ð²ÑÐ¼Ñ Ð½Ð¾Ð²Ñми ÑÑÑоками, добавленнÑми Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ JavaScript:
table {
background: #000;
}
table td {
background: #fff;
}
ÐовÑÑка DocumentFragment
DocumentFragment
не подÑ
Ð¾Ð´Ð¸Ñ Ð² каÑеÑÑве Ñелевого обÑекÑа Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
ÑобÑÑий, поÑÑÐ¾Ð¼Ñ Ð¿ÑедпоÑÑиÑелÑнее клониÑоваÑÑ Ð¸Ð»Ð¸ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑлеменÑÑ Ð²Ð½ÑÑÑи него.
РаÑÑмоÑÑим ÑледÑÑÑие HTML-ÑазмеÑÐºÑ Ð¸ JavaScript-код:
HTML<div id="container"></div>
<template id="template">
<div>Click me</div>
</template>
JavaScript
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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4