假设我有这样的代码:
class MyElem extends HTMLElement {
constructor() {
super();
let templateContent = document.getElementById('template-elem').content;
this.innerHTML = templateContent.cloneNode(true);
}
}
window.customElements.define('my-elem', MyElem);
<template id="template-elem">
<div class="a">
<div class="b">b</div>
<div class="c">c</div>
</div>
</template>
<my-elem></my-elem>
为什么这不起作用?在 Chrome 检查器中,自定义元素内部没有 HTML。我也试过这样做:
this.append(templateContent.cloneNode(true));
但这也导致了一个空的 HTML 树。
所有教程都提到使用影子 DOM,如下所示:
this.attachShadow({mode: 'open'}).appendChild(templateContent.cloneNode(true));
虽然这有效,但它会强制您将 Shadow DOM 用于您的自定义元素。有没有办法在不需要使用 Shadow DOM 的情况下将模板的 HTML 附加到您的自定义元素?我更愿意在我的小用例中使用全局 CSS 样式。
眼眸繁星
慕尼黑的夜晚无繁华
相关分类