javascript - 使用 Shadow DOM 将内容与演示分离

标签 javascript html shadow-dom

引用:HTML5Rocks Shadow DOM 101

问题:如何替换 <content></content 的内容来自#nameTagTemplate模板?

问题:目前我的 javascript 替换了所有模板元素。

HTML

<div class="todo">Hey I'm a todo app</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">
        <content></content>
      </div>
    </div>
</template>

js文件

var todoEl = document.querySelector('.todo');
var template = document.querySelector('#nameTagTemplate');
var clone = document.importNode(template.content, true);
var root = todoEl.createShadowRoot()
root.appendChild(clone);
root.textContent = 'Shellie'; // this line replaces all nodes in template.
// I would like root.textContent to just replace the content tag elements.

评论:更新仍然不起作用

// template logic goes here
var todoEl = document.querySelector('.todo');
var template = document.querySelector('#nameTagTemplate');
var clone = document.importNode(template.content, true);
clone.getElementsByTagName("content")[0].textContent='123';
var root = todoEl.createShadowRoot();
root.appendChild(clone);

最佳答案

因此,如果您编辑 textContent .todo的元素然后它按预期工作。

var todoEl = document.querySelector('.todo');
var template = document.querySelector('#nameTagTemplate');
var clone = document.importNode(template.content, true);
var root = todoEl.createShadowRoot();
root.appendChild(clone);
todoEl.textContent = 'Shellie';

var todoEl = document.querySelector('.todo');
var template = document.querySelector('#nameTagTemplate');
var clone = document.importNode(template.content, true);
var root = todoEl.createShadowRoot();
root.appendChild(clone);
todoEl.textContent = 'Shellie';
<div class="todo">Hey I'm a todo app</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">
      <h3><content></content></h3>
    </div>
  </div>
</template>

html5rocks article这是通过单击按钮时查询 DOM 元素来完成的。它还表示“插入点从影子主机中挑选内容以在该点呈现”,这意味着影子主机上的内容位于 <content></content> 内部。元素。

关于javascript - 使用 Shadow DOM 将内容与演示分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30585566/

相关文章:

javascript - 如何让 DateTimePicker 在 iOS 和 Android 上工作?

javascript - 按钮: Onclick change own bgcolor

python - 使用 Python 抓取 HTML

html - 如何从框架集框架内更改浏览器窗口的 URL?

javascript - attachShadow 能否返回不是#shadow-root 的#document-fragment?

javascript - 如何将字符串数组的 JavaScript 数组转换为 C# 数据结构?

javascript - 数据表作为全功能的表单元素

javascript - 自动将焦点设置在动态加载的输入字段上

html - 如何在#shadow-root ( shadow DOM ) 中重新设计元素

css - : fixed work in a shadow DOM root?应该怎么定位