shadow dom是dom中的一块影子区域,它和主dom相互独立,互不影响,这很好的保证了组件的私有性和独立性。
在宿主元素上附加shadow root,并设置访问模式open或者close,设置为open时可通过shadow root访问shadow dom。
const hostDom = document.getElementById("ShadowHost")
const shadowRoot = hostDom.attachShadow({mode: 'open'})
document.body.appendChild(hostDom)
// 向 Shadow DOM中添加内容
shadowRoot.innerHTML = `
<style>
h1 { color: red; }
</style>
<h1>I'm shadow dom!</h1>
`
customElements.define('my-shadow-element', class extends HTMLElement {
constructor() {
super();
const ShadowHostContent = document.getElementById('ShadowHostContent');
const shadowRoot = this.attachShadow({mode: 'open'})
if(ShadowHostContent && ShadowHostContent.content) {
shadowRoot.appendChild(ShadowHostContent.content.cloneNode(true))
} else {
shadowRoot.innerHtml = `
<style>
h1 { color: red; }
</style>
<h1>I'm shadow dom!</h1>
`
}
}
})