å
建ç <template> å
ç´ ç¨æ¥åå¨ HTML 模æ¿ãæµè§å¨å°å¿½ç¥å®çå
容ï¼ä»
æ£æ¥è¯æ³çæææ§ï¼ä½æ¯æä»¬å¯ä»¥å¨ JavaScript ä¸è®¿é®å使ç¨å®æ¥å建å
¶ä»å
ç´ ã
ä»ç论ä¸è®²ï¼æä»¬å¯ä»¥å¨ HTML ä¸çä»»ä½ä½ç½®å建ä¸å¯è§å
ç´ æ¥å¨å HTML 模æ¿ãé£ <template> å
ç´ æä»ä¹ä¼å¿ï¼
é¦å ï¼å ¶å 容å¯ä»¥æ¯ä»»ä½ææçHTMLï¼å³ä½¿å®é常éè¦ç¹å®çå°éæ ç¾ã
ä¾å¦ï¼æä»¬å¯ä»¥å¨å
¶ä¸æ¾ç½®ä¸è¡è¡¨æ ¼ <tr> ï¼
<template>
<tr>
<td>Contents</td>
</tr>
</template>
é常ï¼å¦ææä»¬å¨ <tr> å
æ¾ç½®ç±»ä¼¼ <div> çå
ç´ ï¼æµè§å¨ä¼æ£æµå°æ æç DOM ç»æå¹¶å¯¹å
¶è¿è¡âä¿®å¤âï¼ç¶åç¨ <table> å°é <tr> ï¼é£ä¸æ¯æä»¬æ³è¦çãè <template> åå®å
¨ä¿çæä»¬å¨åçå
容ã
æä»¬ä¹å¯ä»¥å°æ ·å¼åèæ¬æ¾å
¥ <template> å
ç´ ä¸ï¼
<template>
<style>
p { font-weight: bold; }
</style>
<script>
alert("Hello");
</script>
</template>
æµè§å¨è®¤ä¸º <template> çå
容âä¸å¨ææ¡£ä¸âï¼æ ·å¼ä¸ä¼è¢«åºç¨ï¼èæ¬ä¹ä¸ä¼è¢«æ§è¡ï¼ <video autoplay> ä¹ä¸ä¼è¿è¡ï¼çã
彿们å°å 容æå ¥ææ¡£æ¶ï¼è¯¥å 容å°å为活å¨ç¶æï¼åºç¨æ ·å¼ï¼è¿è¡èæ¬çï¼ã
æå ¥æ¨¡æ¿
模æ¿ç content 屿§å¯çä½DocumentFragment ââ ä¸ç§ç¹æ®ç DOM èç¹ã
æä»¬å¯ä»¥å°å ¶è§ä¸ºæ®éçDOMèç¹ï¼é¤äºå®æä¸ä¸ªç¹æ®å±æ§ï¼å°å ¶æå ¥æä¸ªä½ç½®æ¶ï¼ä¼è¢«æå ¥çåæ¯å ¶åèç¹ã
ä¾å¦ï¼
<template id="tmpl">
<script>
alert("Hello");
</script>
<div class="message">Hello, world!</div>
</template>
<script>
let elem = document.createElement('div');
// Clone the template content to reuse it multiple times
elem.append(tmpl.content.cloneNode(true));
document.body.append(elem);
// Now the script from <template> runs
</script>
让æä»¬ç¨ <template> éåä¸ä¸ç« ç Shadow DOM 示ä¾ï¼
å¨ (*) è¡ï¼æä»¬å° tmpl.content ä½ä¸º DocumentFragment å
éåæå
¥ï¼å®çåèç¹ï¼<style>ï¼<p>ï¼å°ä»£ä¸ºæå
¥ã
å®ä»¬ä¼åæä¸ä¸ª Shadow DOMï¼
<div id="elem">
#shadow-root
<style> p { font-weight: bold; } </style>
<p id="message"></p>
</div>
æ»ç»
æ»ç»ä¸ä¸ï¼
<template>çå 容å¯ä»¥æ¯ä»»ä½è¯æ³æ£ç¡®ç HTMLã<template>å 容被è§ä¸ºâè¶ åºææ¡£èå´âï¼å æ¤å®ä¸ä¼äº§çä»»ä½å½±åã- æä»¬å¯ä»¥å¨JavaScript ä¸è®¿é®
template.contentï¼å°å ¶å é以卿°ç»ä»¶ä¸éå¤ä½¿ç¨ã
<template> æ ç¾é常ç¬ç¹ï¼å 为ï¼
- æµè§å¨å°æ£æ¥å ¶ä¸çHTMLè¯æ³ï¼ä¸å¨èæ¬ä¸ä½¿ç¨æ¨¡æ¿å符串ä¸åï¼ã
- ä½å
许使ç¨ä»»ä½é¡¶çº§ HTML æ ç¾ï¼å³ä½¿æ²¡æéå½å
è£
å
ç´ çæ æä¹çå
ç´ ï¼ä¾å¦
<tr>ï¼ã - å
¶å
容æ¯äº¤äºå¼çï¼æå
¥å
¶ææ¡£åï¼èæ¬ä¼è¿è¡ï¼
<video autoplay>ä¼èªå¨ææ¾ã
<template> å
ç´ ä¸å
·æä»»ä½è¿ä»£æºå¶ï¼æ°æ®ç»å®æåéæ¿æ¢çåè½ï¼ä½æä»¬å¯ä»¥å¨å
¶åºç¡ä¸å®ç°è¿äºåè½ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼