javascript - createShadowRoot 使元素不可见

标签 javascript html shadow-dom

我正在关注影子 DOM 上的本教程:

http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/

由于某种原因,当我在元素上调用 createShadowRoot 函数时,该元素变得不可见。

这是我的代码:

<div id="nameTag">Bob</div>
<template id="nameTagTemplate">
    <style>
        .outer {
            border: 2px solid brown;
        }
    </style>
    <div class="outer">
        <div class="boilerplate">
            Hi! My name is
        </div>
        <div class="name">
            Bob
        </div>
    </div>
</template>

<script>
    var shadow = document.querySelector('#nameTag').createShadowRoot();
    // var template = document.querySelector('#nameTagTemplate');
    // shadow.appendChild(template.content.cloneNode());
</script>

当我不调用此方法时,代码可以正常工作。
有什么想法让它变得不可见吗?

谢谢:)

最佳答案

影子 DOM 的主要目标是将内容与表示分离。阅读:The content is in the document; the presentation is in the Shadow DOM

在 Shadow DOM 中 <content>充当内容的插入点(在本例中, 元素中的文本“Bob”)我们要显示。如果没有这个,内容虽然已经在文档中可用,但无法呈现。

所以,您需要将代码修改为这样 -

<template id="nameTagTemplate">
<style></style>
<div class="outer">
  <div class="boilerplate">
    Hi! My name is
  </div>
  <div class="name">
   <content></content>
  </div>
</div>
</template>

并且,尝试使用

    var shadow = document.querySelector('#nameTag').createShadowRoot();
    var template = document.querySelector('#nameTagTemplate');
    //shadow.appendChild( template.content.cloneNode() ); // does not work
    shadow.appendChild( template.content.cloneNode(true) );
    // or
    shadow.appendChild( template.content );

关于javascript - createShadowRoot 使元素不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25475533/

相关文章:

javascript - 无法让这些 javascript if 语句发挥作用

html - PrimeNG 组件菜单步骤,我如何使用 ui-steps-incomplete

html - Bootstrap 带间距的固定导航栏

javascript - 使用 JS 创建的模板标记在附加到 Web 组件内的阴影时不会出现

javascript - 在 rails : No route matches [GET] error 中引用外部 css

javascript - 重新创建 CSS3 过渡 Cubic-Bezier 曲线

javascript - 通过 chrome url 将 javascript 加载到 HEAD

html - 使用 .tk 域时,移动 View 似乎有所不同。为什么?

javascript - 使用 Chrome DevTools 将鼠标悬停在自定义元素上时,自定义元素不会被标记

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