如您所见,我想动态添加内容,但是影子DOM不显示内容。如何使内容可见?我想使内容可见。
let shadow = document.querySelector('#nameTag').createShadowRoot();
let content_area = document.querySelector("#nameTag");
content_area.innerHTML = '<p>Hello world!</p>';
let template = document.querySelector('#nameTagTemplate');
shadow.appendChild( template.content.cloneNode(true) );
shadow.appendChild( template.content );
h2{
color: red;
font-size: 24px;
font-weight: bold;
}
<h2>Hello world!</h2>
<div id="nameTag"></div>
<template id="nameTagTemplate">
<div class="outer">
<div class="name"></div>
</div>
</template>
答案 0 :(得分:1)
首先,您应该使用V1函数attachShadow
而不是V0函数createShadowRoot
。 V0规范已弃用,大多数浏览器均不支持V0规范,并将很快从Chrome中删除。
第二,您需要在模板中显示<slot>
的子代<div id="nameTag"></div>
。
第三,您将模板的克隆和原始模板都附加到shadowRoot中。不确定您是否要这样做,所以我在示例中将其删除。
let shadow = document.querySelector('#nameTag').attachShadow({mode:'open'});
let content_area = document.querySelector("#nameTag");
content_area.innerHTML = 'I show in the slot';
let template = document.querySelector('#nameTagTemplate');
shadow.appendChild( template.content.cloneNode(true) );
h2{
color: red;
font-size: 24px;
font-weight: bold;
}
#nameTag {
border: 1px dashed blue;
}
<h2>Hello world!</h2>
<div id="nameTag"></div>
<template id="nameTagTemplate">
<div class="outer">
<div class="name"><slot></slot></div>
</div>
</template>