javascript - 影子 DOM 不显示内容。如何使内容在 DOM 中可见?

标签 javascript jquery html css shadow-dom

如您所见,我想动态添加内容,但 shadow 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>

最佳答案

首先,您应该使用 V1 函数 attachShadow而不是 V0 函数 createShadowRoot . 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>

关于javascript - 影子 DOM 不显示内容。如何使内容在 DOM 中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55653108/

相关文章:

javascript - 如何在 jquery mobile/中使用范围输入

javascript - 将我的数据库中可用的 pdf 上传到我的服务器

php - AJAX -> PHP 没有持续更新 MySQL 数据库

javascript - 在 Telerik RadGrid 中单击复选框打开对话框窗口

javascript - 我的一些条件被忽视了

javascript - 在一个 block 中显示所有大写字母

javascript - 在 ajax 添加到 Woocommerce 中的购物车事件后运行 javascript 代码

搜索事件的 Jquery 选择器

html - 输入时 div 重复

javascript - 在 Emberjs 中使用每个数据显示嵌套的 json 数据