Baseline Widely available *
<template>
㯠HTML ã®è¦ç´ ã§ãHTML ãã©ã°ã¡ã³ããä¿æããå¾ã§ JavaScript ã使ç¨ãã¦ä½¿ç¨ããããã·ã£ã㦠DOM ã®ä¸ã«å³åº§ã«çæãããããããã®ã¡ã«ããºã ã¨ãã¦æ©è½ãã¾ãã
ãã®è¦ç´ ã«ã¯ã°ãã¼ãã«å±æ§ãããã¾ãã
shadowrootmode
親è¦ç´ ã®ã·ã£ãã¦ã«ã¼ããçæãã¾ãã ãã㯠Element.attachShadow()
ã¡ã½ããã®å®£è¨çã§ãåã enumerated å¤ãåãå
¥ãã¾ãã
open
å é¨ã·ã£ãã¦ã«ã¼ã DOM ã JavaScript ã«å ¬éãã¾ãï¼ã»ã¨ãã©ã®ç¨éã§æ¨å¥¨ï¼ã
closed
å é¨ã·ã£ãã¦ã«ã¼ã DOM ã JavaScript ããé ãã¾ãã
ã¡ã¢: HTML ãã¼ãµã¼ã¯ããã®å±æ§ãè¨å®ããã¦ãããã¼ãã®æåã® <template>
ã«å¯¾ãã¦ãDOM ã« ShadowRoot
ãªãã¸ã§ã¯ãã使ãã¾ãã ãã®å±æ§ãè¨å®ããã¦ããªãå ´åãã¾ãã¯è¨±å¯ãããå¤ãè¨å®ããã¦ããªãå ´åãããã㯠ShadowRoot
ãæ¢ã«åã親ã«å®£è¨çã«ä½æããã¦ããå ´åã¯ãHTMLTemplateElement
ã使ããã¾ãã HTMLTemplateElement
ã¯ãHTMLTemplateElement.shadowRootMode
ãè¨å®ããããããã¨ã§ãè§£éå¾ã«ã·ã£ãã¦ã«ã¼ãã«å¤æ´ãããã¨ã¯ã§ãã¾ããã
ã¡ã¢: å¤ããã¥ã¼ããªã¢ã«ãä¾ã§ã¯ãChrome 90-110 ã§å¯¾å¿ãã¦ãã鿍æºã® shadowroot
屿§ãè¦ã¤ããããããã¾ããããã®å±æ§ã¯åé¤ãããæ¨æºã® shadowrootmode
屿§ã«ç½®ãæãããã¦ãã¾ãã
shadowrootclonable
ãã®è¦ç´ ã使ç¨ãã¦ä½æãã ShadowRoot
ã® clonable
ããããã£ã®å¤ã true
ã«è¨å®ãã¾ãã è¨å®ããã¦ããå ´åãã·ã£ãã¦ãã¹ãï¼ãã® <template>
ã®è¦ªè¦ç´ ï¼ã®è¤è£½ã Node.cloneNode()
ã¾ã㯠Document.importNode()
ã§ä½æããã¨ãã³ãã¼ã«ã·ã£ãã¦ã«ã¼ããå«ã¾ãã¾ãã
shadowrootdelegatesfocus
ãã®è¦ç´ ã使ç¨ãã¦ä½æãã ShadowRoot
ã® delegatesFocus
ããããã£ã®å¤ã true
ã«è¨å®ãã¾ãã ãããè¨å®ããã¦ãã¦ãã·ã£ãã¦ããªã¼å
ã®ãã©ã¼ã«ã¹å¯è½ã§ãªãè¦ç´ ã鏿ããã¦ããå ´åããã©ã¼ã«ã¹ã¯ããªã¼å
ã®æåã®ãã©ã¼ã«ã¹å¯è½ãªè¦ç´ ã«è²ããã¾ãã ãã®å¤ã¯ false
ãæ¢å®å¤ã§ãã
shadowrootserializable
Experimental
ãã®è¦ç´ ã使ç¨ãã¦ä½æãã ShadowRoot
ã® serializable
ããããã£ã®å¤ã true
ã«è¨å®ãã¾ãã è¨å®ããã¦ããå ´åãã·ã£ãã¦ã«ã¼ã㯠Element.getHTML()
ã¾ã㯠ShadowRoot.getHTML()
ã¡ã½ããããoptions.serializableShadowRoots
弿°ã true
ã«è¨å®ãã¦å¼ã³åºããã¨ã§ã·ãªã¢ã©ã¤ãºããã¾ãã ãã®å¤ã¯ false
ãæ¢å®å¤ã§ãã
<template>
è¦ç´ ã®ä¸»ãªç¨é㯠2 ã¤ããã¾ãã
æ¢å®ã§ã¯ãè¦ç´ ã®ã³ã³ãã³ãã¯ã¬ã³ããªã³ã°ããã¾ããã 対å¿ãã HTMLTemplateElement
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯æ¨æºã§ content
ããããã£ãå«ã¿ã¾ãï¼åçã® content/markup 屿§ã¯ããã¾ããï¼ããã® content
ããããã£ã¯èªã¿åãå°ç¨ã§ããã³ãã¬ã¼ãã表ã DOM ãµãããªã¼ãæ ¼ç´ãã DocumentFragment
ãä¿æãã¾ãã ãã®ãã©ã°ã¡ã³ã㯠cloneNode
ã¡ã½ããã§è¤è£½ããDOM ã«æ¿å
¥ãããã¨ãã§ãã¾ãã
content
ããããã£ã使ç¨ããã¨ãã¯ãè¿å¤ã® DocumentFragment
ãäºæãã¬æåã示ããã¨ããããã¨ã«æ³¨æãå¿
è¦ã§ãã 詳細ã¯ä¸è¨ã® DocumentFragment ã®è½ã¨ãç©´ãé¿ããç¯ãåç
§ãã¦ãã ããã
ãã <template>
è¦ç´ ã shadowrootmode
屿§ã®å¤ open
ã¾ã㯠closed
ãæ ¼ç´ããã¨ãHTML ãã¼ãµã¼ã¯ç´ã¡ã«ã·ã£ã㦠DOM ãçæãã¾ãããã®è¦ç´ 㯠ShadowRoot
ã§ã©ãããããã³ã³ãã³ãã«ãã£ã¦ DOM å
ã§ç½®ãæãããã親è¦ç´ ã«è£
çããã¾ãã ãã㯠Element.attachShadow()
ãå¼ã³åºãã¦è¦ç´ ã«ã·ã£ãã¦ã«ã¼ããä»ããã®ã¨å®£è¨çã«ç価ã§ãã
è¦ç´ ã shadowrootmode
ã«ä»ã®å¤ã示ãå ´åãã¾ã㯠shadowrootmode
屿§ãæããªãå ´åããã¼ãµã¯ HTMLTemplateElement
ãçæãã¾ãã åæ§ã«ã宣è¨çã·ã£ãã¦ã«ã¼ããè¤æ°ããå ´åãæåã®ã·ã£ãã¦ã«ã¼ãã®ã¿ã ShadowRoot
ã§ç½®ãæãããããã以é㯠HTMLTemplateElement
ãªãã¸ã§ã¯ãã¨ãã¦è§£éã§ãã¾ãã
ã¾ããHTML é¨åã®ä¾ããå§ãã¾ãããã
<table id="producttable">
<thead>
<tr>
<td>UPC_Code</td>
<td>Product_Name</td>
</tr>
</thead>
<tbody>
<!-- existing data could optionally be included here -->
</tbody>
</table>
<template id="productrow">
<tr>
<td class="record"></td>
<td></td>
</tr>
</template>
ã¾ããJavaScript ã³ã¼ãã使ç¨ãã¦å¾ããã³ã³ãã³ããæ¿å ¥ããããã®è¡¨ãä½ãã¾ããæ¬¡ã«ã1 è¡åã表ã HTML æçã®æ§é ãæ¸ããããã³ãã¬ã¼ããç¶ãã¾ãã
表ãçæããããã³ãã¬ã¼ããå®ç¾©ããã¾ããã JavaScript ã使ã£ã¦ããã³ãã¬ã¼ããåºã«æ§ç¯ãããåè¡ãè¡¨ã«æ¿å ¥ãã¾ãã
// templete è¦ç´ ã® content 屿§ã®æç¡ã確èªãããã¨ã§ã
// ãã©ã¦ã¶ã¼ã HTML ã® template è¦ç´ ã«å¯¾å¿ãã¦ããããã¹ããã¾ãã
if ("content" in document.createElement("template")) {
// æ¢åã® HTML tbody 㨠template ã®è¡ã使ã£ã¦
// table ãã¤ã³ã¹ã¿ã³ã¹çæãã¾ãã
const tbody = document.querySelector("tbody");
const template = document.querySelector("#productrow");
// æ°ããè¡ãè¤è£½ãã¦è¡¨ã«æ¿å
¥ãã¾ãã
const clone = template.content.cloneNode(true);
let td = clone.querySelectorAll("td");
td[0].textContent = "1235646565";
td[1].textContent = "Stuff";
tbody.appendChild(clone);
// æ°ããè¡ãè¤è£½ãã¦è¡¨ã«æ¿å
¥ãã¾ãã
const 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 è¦ç´ ã«å¯¾å¿ãã¦ããªãã®ã§
// 表ã«è¡ã追å ããã»ãã®æ¹æ³ãæ¢ãã¾ãã
}
çµæã¨ãã¦ã JavaScript ãéãã¦ãæ°ããè¡ã追å ããã HTML ã®è¡¨ãã§ãã¾ãã
table {
background: #000;
}
table td {
background: #fff;
}
宣è¨çã·ã£ã㦠DOM ã®å®è£
ãã®ä¾ã§ã¯ããã¼ã¯ã¢ããã®å§ãã«é表示ã§å¯¾å¿ããè¦åãè¨è¼ãã¦ãã¾ãããã®è¦åã¯å¾ã§ãã©ã¦ã¶ã¼ã® shadowrootmode
屿§ã«å¯¾å¿ãã¦ããªãå ´åã« JavaScript ã§è¡¨ç¤ºããããã«è¨å®ãã¾ããæ¬¡ã®è¨äºã«ã¯ 2 ã¤ã® <article>
è¦ç´ ããããããããç°ãªãæ¯ãèãããã <style>
è¦ç´ ãå«ãã§ãã¾ããæåã® <style>
è¦ç´ ã¯ææ¸å
¨ä½ã«å¯¾ãã¦ã°ãã¼ãã«ã§ãã2 ã¤ç®ã¯ shadowrootmode
屿§ãåå¨ããããã<template>
è¦ç´ ã®ä»£ããã«çæãããã·ã£ãã¦ã«ã¼ãã«ã¹ã³ã¼ãããã¾ãã
<p hidden>
â Your browser doesn't support <code>shadowrootmode</code> attribute yet.
</p>
<article>
<style>
p {
padding: 8px;
background-color: wheat;
}
</style>
<p>I'm in the DOM.</p>
</article>
<article>
<template shadowrootmode="open">
<style>
p {
padding: 8px;
background-color: plum;
}
</style>
<p>I'm in the shadow DOM.</p>
</template>
</article>
const isShadowRootModeSupported =
HTMLTemplateElement.prototype.hasOwnProperty("shadowRootMode");
document
.querySelector("p[hidden]")
.toggleAttribute("hidden", isShadowRootModeSupported);
ãã©ã¼ã«ã¹ãè²æ¸¡ãä¼´ã宣è¨çã·ã£ã㦠DOM
ãã®ä¾ã§ã¯ãshadowrootdelegatesfocus
ã宣è¨çã«ä½æããã·ã£ãã¦ã«ã¼ãã«é©ç¨ãããã©ã¼ã«ã¹ã«ã©ã®ãããªå¹æããããã示ãã¾ãã
ãã®ã³ã¼ãã§ã¯ãæåã« <template>
è¦ç´ ã« shadowrootmode
屿§ãç¨ãã¦ã<div>
è¦ç´ ã®ä¸ã«ã·ã£ãã¦ã«ã¼ãã宣è¨ãã¾ãã ããã«ãããããã¹ããæ ¼ç´ãããã©ã¼ã«ã¹ã§ããªã <div>
ã¨ããã©ã¼ã«ã¹ã§ãã <input>
è¦ç´ ã®ä¸¡æ¹ã表示ããã¾ãã ã¾ãã:focus
ãæã¤è¦ç´ ãéã«ã¹ã¿ã¤ã«è¨å®ãããã¹ãè¦ç´ ã®é常ã®ã¹ã¿ã¤ã«è¨å®ãè¨å®ããã«ã¯ CSS ã使ç¨ãã¾ãã
<div>
<template shadowrootmode="open">
<style>
:host {
display: block;
border: 1px dotted black;
padding: 10px;
margin: 10px;
}
:focus {
outline: 2px solid blue;
}
</style>
<div>Clickable Shadow DOM text</div>
<input type="text" placeholder="Input inside Shadow DOM" />
</template>
</div>
2 ã¤ç®ã®ã³ã¼ããããã¯ã¯ãshadowrootdelegatesfocus
屿§ãè¨å®ãã¦ãã以å¤ã¯åãã§ãããã®å±æ§ã¯ãããªã¼å
ã®ãã©ã¼ã«ã¹å¯è½ã§ãªãè¦ç´ ã鏿ãããå ´åã«ãããªã¼å
ã®æåã®ãã©ã¼ã«ã¹å¯è½ãªè¦ç´ ã«ãã©ã¼ã«ã¹ãè²ã£ããã®ã§ãã
<div>
<template shadowrootmode="open" shadowrootdelegatesfocus>
<style>
:host {
display: block;
border: 1px dotted black;
padding: 10px;
margin: 10px;
}
:focus {
outline: 2px solid blue;
}
</style>
<div>Clickable Shadow DOM text</div>
<input type="text" placeholder="Input inside Shadow DOM" />
</template>
</div>
æå¾ã«ã以ä¸ã® CSS ã使ç¨ãã¦ã親è¦ç´ ã§ãã <div>
ã«ãã©ã¼ã«ã¹ãããã¨ãã«ç·é»è²ã®æ ç·ãé©ç¨ãã¾ãã
div:focus {
border: 2px solid red;
}
ãã®çµæãä¸è¨ã«ç¤ºãã¾ãã HTML ã¯æåã«ã¬ã³ããªã³ã°ãããã¨ããæåã®ç»åã«ç¤ºãããã«è¦ç´ ã«ã¯ã¹ã¿ã¤ã«è¨å®ãããã¾ããã shadowrootdelegatesfocus
ãè¨å®ããã¦ããªãã·ã£ãã¦ã«ã¼ãã§ã¯ã<input>
以å¤ã®å ´æãã¯ãªãã¯ãã¦ããã©ã¼ã«ã¹ã¯å¤ããã¾ããï¼<input>
è¦ç´ ã鏿ãã㨠2 ã¤ç®ã®ç»åã®ããã«ãªãã¾ãï¼ã
shadowrootdelegatesfocus
ãè¨å®ããã·ã£ãã¦ã«ã¼ãã§ã¯ãããã¹ãï¼ãã©ã¼ã«ã¹ã§ããªãï¼ãã¯ãªãã¯ããã¨ã<input>
è¦ç´ ã鏿ããã¾ãã ããã¯ä¸è¨ã«ç¤ºãããã«è¦ªè¦ç´ ããã©ã¼ã«ã¹ããã¾ãã
DocumentFragment
ã®å¤ã渡ãããã¨ãNode.appendChild
ãåæ§ã®ã¡ã½ããã¯ãã®å¤ã®åãã¼ãã ãã対象ã¨ãããã¼ãã«ç§»åããã¾ãããããã£ã¦ãã¤ãã³ããã³ãã©ã¼ã¯ DocumentFragment
èªä½ã§ã¯ãªããDocumentFragment
ã®åãã¼ãã«è¨å®ãããã¨ãæ¨å¥¨ããã¾ãã
以ä¸ã® HTML ããã³ JavaScript ãèãã¦ã¿ã¦ãã ããã
HTML<div id="container"></div>
<template id="template">
<div>ã¯ãªãã¯ãã¦ãã ãã</div>
</template>
JavaScript
const container = document.getElementById("container");
const template = document.getElementById("template");
function clickHandler(event) {
event.target.append(" â ãã® div ãã¯ãªãã¯ããã¾ãã");
}
const firstClone = template.content.cloneNode(true);
firstClone.addEventListener("click", clickHandler);
container.appendChild(firstClone);
const secondClone = template.content.cloneNode(true);
secondClone.children[0].addEventListener("click", clickHandler);
container.appendChild(secondClone);
çµæ
firstClone
㯠DocumentFragment
ãªã®ã§ãappendChild
ãå¼ã³åºãããã¨ãã« container
ã«è¿½å ãããã®ã¯ãã®åãã¼ãã ãã§ãfirstClone
ã®ã¤ãã³ããã³ãã©ã¼ã¯ã³ãã¼ããã¾ããã䏿¹ãsecondClone
ã¯æåã®åãã¼ãã«ã¤ãã³ããã³ãã©ã¼ã追å ããã¦ãããããappendChild
ãå¼ã³åºãããã¨ã¤ãã³ããã³ãã©ã¼ãã³ãã¼ãããã¯ãªãã¯ããã¨æå¾
éãã«åä½ãã¾ãã
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