çµã¿è¾¼ã¿ã® <template> è¦ç´ 㯠HTML ãã¼ã¯ã¢ãããã³ãã¬ã¼ãã®æ ¼ç´å ´æã¨ãã¦æ©è½ãã¾ãããã©ã¦ã¶ã¯ãããã®ã³ã³ãã³ãã¯ç¡è¦ãã¾ã(æ§æã®ãã§ãã¯ã®ã¿è¡ãã¾ã)ããJavaScript ã§ã¯ã¢ã¯ã»ã¹ããä»ã®è¦ç´ ãä½ãã®ã«ä½¿ããã¨ãã§ãã¾ãã
template 㯠HTML ãã¼ã¯ã¢ãããæ ¼ç´ããç®çã§ãHTML ä¸ã«è¦ããªãè¦ç´ ã使ãããã¨ãã§ãã¾ããtemplate ã¯ä½ãç¹å¥ãªã®ã§ããããï¼
第ä¸ã«ãtemplate å
ã®ã³ã³ãã³ãã¯ãé常é©åãªå²ã¿ã¿ã°ãå¿
è¦ã¨ããå ´åã§ãæå¹ãªHTMLã«ãªãã¾ãã
ä¾ãã°ããã¼ãã«ã®è¡ <tr> ãç½®ããã¨ãã§ãã¾ã:
<template>
<tr>
<td>Contents</td>
</tr>
</template>
é常ãä¾ãã° <div> ã®ä¸ã« <tr> ãç½®ããã¨ããã¨ããã©ã¦ã¶ã¯ç¡å¹ãª DOM æ§é ã§ãããã¨ãæ¤ç¥ããããã âä¿®æ£â ãããã¨ãã¦åå¾ã« <table> ã¿ã°ã追å ãã¾ããå ´åã«ãã£ã¦ã¯ãããã¯ãã¦ã»ãããã¨ã§ã¯ããã¾ããã䏿¹ã<template> ã¯ããã«ç½®ãããã®ãæ£ç¢ºã«ç¶æãã¾ãã
åæ§ã«ãã¹ã¿ã¤ã«ãã¹ã¯ãªããã <template> ã«å
¥ãããã¨ãã§ãã¾ã:
<template>
<style>
p { font-weight: bold; }
</style>
<script>
alert("Hello");
</script>
</template>
ãã©ã¦ã¶ã¯ <template> ã®ã³ã³ãã³ã㯠âããã¥ã¡ã³ãå¤â ã¨ã¿ãªãã¾ãã: ã³ã³ãã³ãã«ããã¹ã¿ã¤ã«ã¯é©ç¨ããããã¹ã¯ãªãããå®è¡ããã¾ããã<video autoplay> ãå®è¡ããã¾ãã, etcã
ã³ã³ãã³ãã¯ãããã¥ã¡ã³ãã«æ¿å ¥ãããã¨ãã«ã©ã¤ãã«ãªãã¾ã(ã¹ã¿ã¤ã«ãé©ç¨ãããã¹ã¯ãªãããå®è¡ãããããªã©ã§ã)ã
template ã®æ¿å ¥
ãã³ãã¬ã¼ãã®ã³ã³ãã³ãã¯ãcontent ããããã£ã§ DocumentFragment â ç¹å¥ãªç¨®é¡ã® DOM ãã¼ã â ã¨ãã¦å©ç¨ã§ãã¾ãã
ããç¹å¥ãªæ§è³ª(ã©ããã«æ¿å ¥ããã¨ãããã® âåâ ãæ¿å ¥ããã)ãé¤ãã¨ãä»ã® DOM ãã¼ããã¡ã¨åãããã«æ±ããã¨ãã§ãã¾ãã
ä¾:
<template id="tmpl">
<script>
alert("Hello");
</script>
<div class="message">Hello, world!</div>
</template>
<script>
let elem = document.createElement('div');
// ä½åº¦ãåå©ç¨ããããããã³ãã¬ã¼ãã®ã³ã³ãã³ããã¯ãã¼ã³ãã¾ã
elem.append(tmpl.content.cloneNode(true));
document.body.append(elem);
// ãã¾ã<template> ã®ã¹ã¯ãªãããå®è¡ããã¾ã
</script>
åã®ãã£ãã¿ã¼ã® Shadow DOM ã®ä¾ã <template> ã使ã£ã¦æ¸ãç´ãã¦ã¿ã¾ããã:
<template id="tmpl">
<style> p { font-weight: bold; } </style>
<p id="message"></p>
</template>
<div id="elem">Click me</div>
<script>
elem.onclick = function() {
elem.attachShadow({mode: 'open'});
elem.shadowRoot.append(tmpl.content.cloneNode(true)); // (*)
elem.shadowRoot.getElementById('message').innerHTML = "Hello from the shadows!";
};
</script>
è¡ (*) ã§ã¯ãDocumentFragment ã¨ã㦠temp.content ãã¯ãã¼ã³ãã¦æ¿å
¥ãã¦ãã¾ããçµæããã®å(<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 æ§æããã§ãã¯ãã¾ã(ã¹ã¯ãªããå ã§ãã³ãã¬ã¼ãæååã使ç¨ããã®ã¨ã¯å¯¾ç §çã«)ã
- ããã§ããé©åãªã©ããã¼(e.g.
<tr>)ããªãã¨æå³ããªããããªãã®ã§ãæä¸ä½ã® HTML ã¿ã°ã¨ãã¦ä½¿ç¨ãããã¨ãã§ãã¾ãã - ã³ã³ãã³ãã¯ã¤ã³ã¿ã©ã¯ãã£ãã§ã: ããã¥ã¡ã³ãã«æ¿å
¥ãããã¨ãã«ãã¹ã¯ãªãããå®è¡ããã
<video autoplay>ãåçãã¾ãã
<template> è¦ç´ èªèº«ã¯ç¹°ãè¿ãã®ä»çµã¿ããã¼ã¿ãã¤ã³ãã£ã³ã°ã夿°ã¸ã®ä»£å
¥ãªã©ã®æ©è½ã¯ããã¾ãããããã®ä¸ã«ããããå®è£
ãã¦ãããã¨ãã§ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã