ã«ã¹ã¿ã è¦ç´ ã®éè¦ãªå´é¢ã®ä¸ã¤ãã«ãã»ã«åã§ãããªããªããã«ã¹ã¿ã è¦ç´ ã¯å®ç¾©ä¸ãåå©ç¨å¯è½ãªæ©è½ã®ä¸é¨ã§ãããä»»æã®ã¦ã§ããã¼ã¸ã«ãããããã¦åä½ããããã¨ãæå¾ ãããããã§ãããã®ããããã¼ã¸ã§å®è¡ãããã³ã¼ãããå é¨å®è£ ã夿´ãããã¨ã§ã«ã¹ã¿ã è¦ç´ ã誤ã£ã¦å£ããã¨ããªãããã«ãããã¨ãéè¦ã§ããã·ã£ã㦠DOM ã使ç¨ããã¨ãDOM ããªã¼ãè¦ç´ ã«å²ãå½ã¦ããã¼ã¸ã§å®è¡ããã JavaScript ã CSS ãããã®ããªã¼ã®å é¨ãé ããã¨ãã§ãã¾ãã
ãã®è¨äºã§ã¯ãã·ã£ã㦠DOM ã®ä½¿ç¨æ³ã®åºæ¬ã«ã¤ãã¦èª¬æãã¾ãã
髿°´æºã®è¦ç¹ãã®è¨äºã¯ããã§ã«ããªãã DOM (Document Object Model) ã®æ¦å¿µãçè§£ãã¦ãããã¨ãæ³å®ãã¦ãã¾ããããã¯ããªã¼ä¸ã®æ§é ã§ãæ¥ç¶ããããã¼ãããã¼ã¯ã¢ããææ¸ï¼ã¦ã§ãææ¸ã®å ´åã¯é常 HTML ææ¸ï¼ã«ç¾ãããã¾ãã¾ãªè¦ç´ ãæååã表ãã¾ããä¾ã¨ãã¦ã以ä¸ã®ãã㪠HTML ã®æçãèãã¦ã¿ã¾ãããã
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title>DOM example</title>
</head>
<body>
<section>
<img src="dinosaur.png" alt="A red Tyrannosaurus Rex." />
<p>
Here we will add a link to the
<a href="https://www.mozilla.org/">Mozilla homepage</a>
</p>
</section>
</body>
</html>
ãã®ãã©ã°ã¡ã³ãã¯ã以ä¸ã® DOM æ§é ãçæãã¾ãï¼ãã¯ã¤ãã¹ãã¼ã¹ã®ã¿ã®ããã¹ããã¼ããé¤ãï¼ã
- HTML - HEAD - META charset="utf-8" - TITLE - #text: DOM example - BODY - SECTION - IMG src="dinosaur.png" alt="A red Tyrannosaurus Rex." - P - #text: Here we will add a link to the - A href="https://www.mozilla.org/" - #text: Mozilla homepage
ã·ã£ã㦠DOM ã«ãããé常㮠DOM ããªã¼ã®è¦ç´ ã®ä¸ã«é ãã DOM ããªã¼ãåãä»ãããã¨ãã§ãã¾ãããã®ã·ã£ã㦠DOM ããªã¼ã¯ã·ã£ãã¦ã«ã¼ãããå§ã¾ãããã®ä¸ã«ã¯æ®éã® DOM ããªã¼ã¨åæ§ã«ä»»æã®è¦ç´ ã追å ãããã¨ãã§ãã¾ãã
以ä¸ã«ã·ã£ã㦠DOM ã«ãããç¨èªãå®ç¾©ãã¾ãã
ã·ã£ã㦠DOM å
ã®ãã¼ãã«ã¯ãã·ã£ãã¦ã§ãªããã¼ãã¨å
¨ãåãããã«å½±é¿ãä¸ãããã¨ãã§ãã¾ãããã¨ãã°ãåã追å ãããã屿§ãè¨å®ããããelement.style.foo ã使ç¨ãã¦åã
ã®ãã¼ãã®ã¹ã¿ã¤ã«ãè¨å®ãããã <style>
è¦ç´ å
ã§ã·ã£ã㦠DOM ããªã¼å
¨ä½ã¸ã®ã¹ã¿ã¤ã«ã追å ããããããã¨ãã§ãã¾ããéãã¯ãã·ã£ã㦠DOM å
ã®ã©ã®ã³ã¼ãããã®å¤ã®ä½ãã«å½±é¿ãä¸ãããã¨ãã§ããã便å©ãªã«ãã»ã«åãã§ãããã¨ã§ãã
ã¦ã§ãéçºè
ãã·ã£ã㦠DOM ãå©ç¨ã§ããããã«ãªãåããããã©ã¦ã¶ã¼ã¯ãã§ã«è¦ç´ ã®å
鍿§é ãã«ãã»ã«åããããã«ã·ã£ã㦠DOM ã使ç¨ãã¦ãã¾ãããä¾ãã°ãæ¢å®ã®ãã©ã¦ã¶ã¼ã³ã³ããã¼ã«ãå
¬éããã¦ãã <video>
è¦ç´ ãæãæµ®ãã¹ã¦ãã ããã DOM ã«ã¯ <video>
è¦ç´ ãã表示ããã¾ãããããã®ã·ã£ã㦠DOM ã®å
é¨ã«ã¯ãä¸é£ã®ãã¿ã³ããã®ä»ã®ã³ã³ããã¼ã«ãå«ã¾ãã¦ãã¾ãã ã·ã£ã㦠DOM 仿§æ¸ã§ã¯ãèªåèªèº«ã§ã«ã¹ã¿ãã¤ãºããè¦ç´ ã®ã·ã£ã㦠DOM ãæä½ã§ããããã«ãã¾ãã
ã·ã£ãã¦ããªã¼ã¨ <slot>
è¦ç´ ã¯ãã·ã£ãã¦ãã¹ããã dir
ããã³ lang
屿§ãç¶æ¿ãã¦ãã¾ãã
次ã®ãã¼ã¸ã«ã¯ã2ã¤ã®è¦ç´ ãå«ã¾ãã¦ãã¾ãã<div>
è¦ç´ ã§ id
ã "host"
ã§ãããã®ã¨ãããã¹ããæ ¼ç´ãã <span>
è¦ç´ ã§ãã
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
"host"
ã®è¦ç´ ãã·ã£ãã¦ãã¹ãã¨ãã¦ä½¿ç¨ãã¾ãããã®ãã¹ãä¸ã§ attachShadow()
ãå¼ã³åºãã¦ã·ã£ã㦠DOM ã使ãããã®ã·ã£ã㦠DOM ã«ã¯ãã¡ã¤ã³ DOM ã«å¯¾ãã¦è¡ãã®ã¨åãããã«ãã¼ãã追å ãããã¨ãã§ãã¾ãããã®ä¾ã§ã¯ãåä¸ã® <span>
è¦ç´ ã追å ãã¾ãã
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
const span = document.createElement("span");
span.textContent = "I'm in the shadow DOM";
shadow.appendChild(span);
çµæã¯æ¬¡ã®ããã«ãªãã¾ãã
HTML ã§å®£è¨çã«ã·ã£ã㦠DOM ã使ããã®ã« JavaScript API ã使ç¨ããæ¹æ³ã¯ãã¯ã©ã¤ã¢ã³ãå´ã§ã¬ã³ããªã³ã°ãããã¢ããªã±ã¼ã·ã§ã³ã«ã¯è¯ã鏿è¢ããããã¾ããããã以å¤ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ããµã¼ãã¼å´ã§ã¬ã³ããªã³ã°ããã UI ã®æ¹ãããã©ã¼ãã³ã¹ãè¯ããã¨ãå¤ãããã®çµæããã使ãåæã®è¯ããã®ã«ã§ããå¯è½æ§ãããã¾ãããã®ãããªå ´åã<template>
è¦ç´ ã使ç¨ãã¦ã·ã£ã㦠DOM ã宣è¨çã«å®ç¾©ãããã¨ãã§ãã¾ãããã®åä½ã®éµã¨ãªãã®ã¯åæåã® shadowrootmode
屿§ã§ãããã㯠open
ã¾ã㯠closed
ã®ã©ã¡ããã«è¨å®ãããã¨ãã§ããattachShadow()
ã¡ã½ããã® mode
ãªãã·ã§ã³ã¨åãå¤ã§ãã
<div id="host">
<template shadowrootmode="open">
<span>I'm in the shadow DOM</span>
</template>
</div>
ã¡ã¢: æ¢å®ã§ã¯ã<template>
ã®å
容ã¯è¡¨ç¤ºããã¾ããããã®å ´åãshadowrootmode="open"
ãè¨è¼ããã¦ãããããã·ã£ãã¦ã«ã¼ããã¬ã³ããªã³ã°ããã¾ãã対å¿ãã¦ãããã©ã¦ã¶ã¼ã§ã¯ããã®ã·ã£ãã¦ã«ã¼ãå
ã®å¯è¦ã³ã³ãã³ãã表示ããã¾ãã
ãã©ã¦ã¶ã¼ã HTML ãè§£éãçµããã¨ã <template>
è¦ç´ ã¯ã親è¦ç´ ï¼ãã®ä¾ã§ã¯ <div id="host">
ï¼ã«è¿½å ãããã·ã£ãã¦ã«ã¼ãã«ã©ãããããå
容ã«ç½®ãæãããã¾ãããã®çµæã® DOM ããªã¼ã¯æ¬¡ã®ããã«ãªãã¾ãï¼DOM ããªã¼ã«ã¯ <template>
è¦ç´ ã¯ããã¾ããï¼ã
- DIV id="host" - #shadow-root - SPAN - #text: I'm in the shadow DOM
ãªããshadowrootmode
ã«å ãã¦ã <template>
ã® shadowrootclonable
ã shadowrootdelegatesfocus
屿§ãªã©ã®ä½¿ç¨ãã¦ãçæãããã·ã£ãã¦ã«ã¼ãã«ä»ã®ããããã£ãæå®ãããã¨ãã§ãã¾ãã
ããã¾ã§ã¯ãããã»ã©å¤ãã¯ãªãããã«è¦ããããããã¾ããããããããã¼ã¸ã§å®è¡ãã¦ããã³ã¼ãããã·ã£ã㦠DOM å ã®è¦ç´ ã«ã¢ã¯ã»ã¹ãããã¨ããå ´åãä½ãèµ·ãããè¦ã¦ããã¾ãããã
ãã®ãã¼ã¸ã¯ã2 ã¤ã® <button>
è¦ç´ ã追å ãããã¨ãé¤ãã¦ãå
ã®ãã¼ã¸ã¨åãã§ãã
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
<br />
<button id="upper" type="button">Uppercase span elements</button>
<button id="reload" type="button">Reload</button>
"Uppercase span elements" ãã¿ã³ãã¯ãªãã¯ããã¨ããã¼ã¸å
ã®ãã¹ã¦ã® <span>
è¦ç´ ãæ¢ãããã®ããã¹ãã大æåã«å¤æãã¾ãã "Reload" ãã¿ã³ãã¯ãªãã¯ããã¨ããã¼ã¸ãåèªã¿è¾¼ã¿ãããã®ã§ãããä¸åº¦è©¦ãã¦ã¿ããã¨ãã§ãã¾ãã
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
const span = document.createElement("span");
span.textContent = "I'm in the shadow DOM";
shadow.appendChild(span);
const upper = document.querySelector("button#upper");
upper.addEventListener("click", () => {
const spans = Array.from(document.querySelectorAll("span"));
for (const span of spans) {
span.textContent = span.textContent.toUpperCase();
}
});
const reload = document.querySelector("#reload");
reload.addEventListener("click", () => document.location.reload());
"Uppercase span elements" ãã¯ãªãã¯ããã¨ãDocument.querySelectorAll()
ãç§ãã¡ã®ã·ã£ã㦠DOM å
ã®è¦ç´ ãæ¢ãã¦ããªããã¨ããããã¾ãããããã¯ãã¼ã¸å
ã® JavaScript ãã广çã«é ããã¦ãã¾ãã
ä¸è¨ã®ä¾ã§ã¯ã弿° { mode: "open" }
ã attachShadow()
ã«æ¸¡ãã¦ãã¾ãã ã¢ã¼ãã "open"
ã«è¨å®ããã¦ããå ´åããã¼ã¸å
ã® JavaScript ã¯ãã·ã£ãã¦ãã¹ãã® shadowRoot
ããããã£ãéãã¦ãã·ã£ã㦠DOM ã®å
é¨ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
ãã®ä¾ã§ã¯ãåè¿°ã®ä¾ã¨åæ§ã«ãHTML ã¯ã·ã£ãã¦ãã¹ããã¡ã¤ã³ã® DOM ããªã¼å
ã® <span>
è¦ç´ ãããã³ 2 ã¤ã®ãã¿ã³ãå«ãã§ãã¾ãã
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
<br />
<button id="upper" type="button">Uppercase shadow DOM span elements</button>
<button id="reload" type="button">Reload</button>
ãã®æç¹ã§ã¯ã"Uppercase" ãã¿ã³ã¯ shadowRoot
ã使ç¨ã㦠DOM å
ã® <span>
è¦ç´ ãæ¢ãã¾ãã
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
const span = document.createElement("span");
span.textContent = "I'm in the shadow DOM";
shadow.appendChild(span);
const upper = document.querySelector("button#upper");
upper.addEventListener("click", () => {
const spans = Array.from(host.shadowRoot.querySelectorAll("span"));
for (const span of spans) {
span.textContent = span.textContent.toUpperCase();
}
});
const reload = document.querySelector("#reload");
reload.addEventListener("click", () => document.location.reload());
ãã®æç¹ã§ã¯ããã¼ã¸ã§å®è¡ããã¦ãã JavaScript ã¯ãã·ã£ã㦠DOM ã®å é¨ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
弿° {mode: "open"}
ã¯ããã¼ã¸ã«ã·ã£ã㦠DOM ã®ã«ãã»ã«åãè§£é¤ããæ¹æ³ãæä¾ãã¾ãããã¼ã¸ã«ãã®æ©è½ãä¸ããããªãå ´åã¯ã代ããã« {mode: "closed"}
ãæ¸¡ãã¨ãshadowRoot
㯠null
ãè¿ãã¾ãã
ãããããããå¼·åãªã»ãã¥ãªãã£ã®ä»çµã¿ã ã¨èããã¹ãã§ã¯ããã¾ã ããä¾ãã°ããã¼ã¸ã§å®è¡ãããã©ã¦ã¶ã¼æ¡å¼µæ©è½ãªã©ãåé¿ããæ¹æ³ãããããã§ãããããããã¼ã¸ãã·ã£ã㦠DOM ããªã¼ã®å é¨ã«ã¢ã¯ã»ã¹ãã¹ãã§ã¯ãªããã¨ã示ããã®ã§ãã
CSS ããã®ã«ãã»ã«åãã®ãã¼ã¸ã®ãã®ãã¼ã¸ã§ã³ã§ã¯ãHTML ã¯å ã®ãã¼ã¸ã§ã³ã¨åãã§ãã
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
JavaScript ã§ã¯ãã·ã£ã㦠DOM ã使ãã¾ãã
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
const span = document.createElement("span");
span.textContent = "I'm in the shadow DOM";
shadow.appendChild(span);
ä»åã¯ããã¼ã¸å
ã® <span>
è¦ç´ ã対象ã¨ãã CSS ãæå®ãã¾ãã
span {
color: blue;
border: 1px solid black;
}
ãã¼ã¸ã® CSS ã¯ãã·ã£ã㦠DOM å ã®ãã¼ãã«ã¯å½±é¿ãã¾ããã
ã·ã£ã㦠DOM å ã«ã¹ã¿ã¤ã«ãé©ç¨ãã®ç¯ã§ã¯ãã·ã£ã㦠DOM ããªã¼å ã§ã¹ã¿ã¤ã«è¨å®ãè¡ã 2 ã¤ã®ç°ãªãæ¹æ³ãè¦ã¦ããã¾ãã
CSSStyleSheet
ãªãã¸ã§ã¯ããæ§ç¯ãããããã·ã£ãã¦ã«ã¼ãã«æ·»ä»ãã¾ãã<template>
è¦ç´ ã®å®£è¨ã« <style>
è¦ç´ ã追å ãã¾ããã©ã¡ãã®å ´åããã·ã£ã㦠DOM ããªã¼ã§å®ç¾©ãããã¹ã¿ã¤ã«ã¯ãã®ããªã¼ã«ã®ã¿é©ç¨ãããããããã¼ã¸ã¹ã¿ã¤ã«ãã·ã£ã㦠DOM ã®è¦ç´ ã«å½±é¿ãä¸ããªãã®ã¨åæ§ã«ãã·ã£ã㦠DOM ã¹ã¿ã¤ã«ã¯ãã¼ã¸ã®ä»ã®é¨åã®è¦ç´ ã«å½±é¿ãä¸ãã¾ããã
æ§ç¯å¯è½ãªã¹ã¿ã¤ã«ã·ã¼ãã·ã£ã㦠DOM ã®ãã¼ã¸è¦ç´ ãæ§ç¯å¯è½ãªã¹ã¿ã¤ã«ã·ã¼ãã§ã¹ã¿ã¤ã«è¨å®ããã«ã¯ãæ¬¡ã®æ¹æ³ãããã¾ãã
CSSStyleSheet
ãªãã¸ã§ã¯ãã使ããCSSStyleSheet.replace()
ã¾ã㯠CSSStyleSheet.replaceSync()
ã使ç¨ãã¦å
容ãè¨å®ShadowRoot.adoptedStyleSheets
ã¸ä»£å
¥ãããã¨ã§ã·ã£ãã¦ã«ã¼ãã¸è¿½å CSSStyleSheet
ã§å®ç¾©ãããã«ã¼ã«ã¯ãã·ã£ã㦠DOM ããªã¼ã ãã§ãªããä»ã«ãå²ãå½ã¦ããã DOM ããªã¼ã«ãé©ç¨ããã¾ãã
ããã§ãåã³ããã¹ã㨠<span>
ãæ ¼ç´ãã HTML ã¯æ¬¡ã®ã¨ããã§ãã
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
ä»åã¯ãã·ã£ã㦠DOM ã使ããCSSStyleSheet
ãªãã¸ã§ã¯ããå²ãå½ã¦ã¾ãã
const sheet = new CSSStyleSheet();
sheet.replaceSync("span { color: red; border: 2px dotted black;}");
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
shadow.adoptedStyleSheets = [sheet];
const span = document.createElement("span");
span.textContent = "I'm in the shadow DOM";
shadow.appendChild(span);
ã·ã£ã㦠DOM ããªã¼ã§å®ç¾©ãããã¹ã¿ã¤ã«ã¯ããã¼ã¸ã®ä»ã®é¨åã«ã¯é©ç¨ããã¾ããã
<template>
宣è¨ã¸ã® <style>
è¦ç´ ã®è¿½å
CSSStyleSheet
ãªãã¸ã§ã¯ãã使ãã代ããã«ã<style>
è¦ç´ ãã¦ã§ãã³ã³ãã¼ãã³ããå®ç¾©ããããã«ä½¿ç¨ãã <template>
è¦ç´ å
ã«è¨è¼ãããã¨ãã§ãã¾ãã
ãã®å ´åãHTML ã«ã¯æ¬¡ã® <template>
宣è¨ãå«ã¾ãã¾ãã
<template id="my-element">
<style>
span {
color: red;
border: 2px dotted black;
}
</style>
<span>I'm in the shadow DOM</span>
</template>
<div id="host"></div>
<span>I'm not in the shadow DOM</span>
JavaScript ã§ãã·ã£ã㦠DOM ã使ããããã« <template>
ã®å
容ã追å ãã¾ãã
const host = document.querySelector("#host");
const shadow = host.attachShadow({ mode: "open" });
const template = document.getElementById("my-element");
shadow.appendChild(template.content);
ç¹°ãè¿ãã«ãªãã¾ããã<template>
ã§å®ç¾©ãããã¹ã¿ã¤ã«ã¯ã·ã£ã㦠DOM ããªã¼å
ã§ã®ã¿é©ç¨ããããã¼ã¸ã®ä»ã®é¨åã«ã¯é©ç¨ããã¾ããã
ã©ã®ãªãã·ã§ã³ã使ç¨ãããã¯ãã¢ããªã±ã¼ã·ã§ã³ã¨ç°å¢è¨å®ã«ãã£ã¦ç°ãªãã¾ãã
CSSStyleSheet
ã使ããadoptedStyleSheets
ã使ç¨ãã¦ã·ã£ãã¦ã«ã¼ãã«å²ãå½ã¦ããã¨ã§ãåä¸ã®ã¹ã¿ã¤ã«ã·ã¼ãã使ãããããè¤æ°ã® DOM ããªã¼ã§å
±æãããã¨ãã§ãã¾ããä¾ãã°ãã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã¼ã§åä¸ã®ã¹ã¿ã¤ã«ã·ã¼ãã使ãããã®ã©ã¤ãã©ãªã¼ã«å±ãããã¹ã¦ã®ã«ã¹ã¿ã è¦ç´ ã§å
±æãããã¨ãã§ãã¾ãããã®ã¹ã¿ã¤ã«ã·ã¼ãã¯ããã©ã¦ã¶ã¼ã«ãã£ã¦ä¸åº¦ã ãè§£éããã¾ããã¾ããã¹ã¿ã¤ã«ã·ã¼ãã«åçãªå¤æ´ãå ãããã®ã·ã¼ãã使ç¨ãããã¹ã¦ã®ã³ã³ãã¼ãã³ãã«ä¼æ¬ããããã¨ãã§ãã¾ãã
<style>
è¦ç´ ãæ·»ä»ããææ³ã¯ã宣è¨çã§ããããå ´åããä¿æããã¹ã¿ã¤ã«ãããã¤ãããå ´åãç°ãªãã³ã³ãã¼ãã³ãéã§ã¹ã¿ã¤ã«ãå
±æããå¿
è¦ããªãå ´åã«æé©ã§ãã
ã·ã£ã㦠DOM ã«ãã£ã¦ã«ãã»ã«åãæä¾ãããªããã°ãã«ã¹ã¿ã è¦ç´ ã¯é常ã«å£ãããããã®ã«ãªã£ã¦ãã¾ãã¾ãã ãã¼ã¸ã§å®è¡ãã JavaScript ã CSS ã«ãã£ã¦ãã«ã¹ã¿ã è¦ç´ ã®åä½ãã¬ã¤ã¢ã¦ãã誤ã£ã¦å£ãã¦ãã¾ããã¨ãç°¡åã«èµ·ããå¾ã¾ãã ã«ã¹ã¿ã è¦ç´ ãéçºããç«å ´ã§ã¯ãã«ã¹ã¿ã è¦ç´ å ã§é©ç¨ãããã»ã¬ã¯ã¿ã¼ããã«ã¹ã¿ã è¦ç´ ã使ç¨ãããã¨ãé¸ãã ãã¼ã¸ã§é©ç¨ãããã»ã¬ã¯ã¿ã¼ã¨ç«¶åãã¦ãããã©ãããç¥ããã¨ã¯ã§ãã¾ããã
ã«ã¹ã¿ã è¦ç´ ã¯ããã¼ã¹ã® HTMLElement
ã¾ã㯠HTMLParagraphElement
ãªã©ã®çµã¿è¾¼ã¿ã® HTML è¦ç´ ãæ¡å¼µããã¯ã©ã¹ã¨ãã¦å®è£
ããã¾ããé常ãã«ã¹ã¿ã è¦ç´ èªä½ãã·ã£ãã¦ãã¹ãã¨ãªãããã®è¦ç´ ãã«ã¼ãã®ä¸ã«è¤æ°ã®è¦ç´ ã使ããè¦ç´ ã®å
é¨å®è£
ãæä¾ãã¾ãã
次ã®ä¾ã§ã¯ãåä¸è²ã§å¡ãã¤ã¶ãããåãæç»ããã«ã¹ã¿ã è¦ç´ <filled-circle>
ã使ãã¾ãã
class FilledCircle extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
// Create a shadow root
// The custom element itself is the shadow host
const shadow = this.attachShadow({ mode: "open" });
// create the internal implementation
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
const circle = document.createElementNS(
"http://www.w3.org/2000/svg",
"circle",
);
circle.setAttribute("cx", "50");
circle.setAttribute("cy", "50");
circle.setAttribute("r", "50");
circle.setAttribute("fill", this.getAttribute("color"));
svg.appendChild(circle);
shadow.appendChild(svg);
}
}
customElements.define("filled-circle", FilledCircle);
<filled-circle color="blue"></filled-circle>
ã«ã¹ã¿ã è¦ç´ ã®å®è£ ã®ãã¾ãã¾ãªå´é¢ã示ãä¾ã«ã¤ãã¦ã¯ã[ã«ã¹ã¿ã è¦ç´ ã®ã¬ã¤ã]ãåç §ãã¦ãã ããã
é¢é£æ å ±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