我希望下面的代码创建一个包含div
且其中包含文本“ Hi”的元素。
该元素出现在检查器中,但屏幕上看不到任何文本。
当我将模板从template
更改为div
时,将显示文本。我在这里做错了什么?
class MyComponent extends HTMLElement {
constructor() {
super()
const shadowRoot = this.attachShadow({ mode: 'open' })
const template = document.createElement('template')
const div = document.createElement('div')
div.innerHTML = 'Hi'
template.appendChild(div)
shadowRoot.appendChild(template.content)
}
}
customElements.define('my-component', MyComponent)
答案 0 :(得分:4)
<template>
是一个特殊元素。
通过其content
属性附加一些HTML元素:
template.content.appendChild(div)
或通过其innerHTML
属性添加HTML代码:
template.innerHTML = '<div>Hi</div>'
答案 1 :(得分:1)
我同意@Supersharp的回答。这是不需要<template>
的替代解决方案。
class MyComponent extends HTMLElement {
constructor() {
super()
const div = document.createElement('div')
div.innerHTML = 'Hi'
this.attachShadow({ mode: 'open' }).appendChild(div)
}
}
customElements.define('my-component', MyComponent)
<my-component></my-component>
或者您可以通过使用shadowRoot的innerHTML
来做到这一点:
class MyComponent extends HTMLElement {
constructor() {
super()
this.attachShadow({ mode: 'open' }).innerHTML = "<div>Hi</div>";
}
}
customElements.define('my-component', MyComponent)
<my-component></my-component>