繁体   English   中英

使用Shadow DOM将内容与演示分开

[英]Separate Content from Presentation using Shadow DOM

参考: HTML5Rocks Shadow DOM 101

问题: 如何替换#nameTagTemplate模板中<content></content

问题:目前,我的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);

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

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文章中,这是通过在单击按钮时查询DOM元素来完成的。 它还说“ 插入点将影子主机中的内容点选到该点 ,然后显示 ”,这意味着影子主机上的内容就是<content></content>元素内部的<content></content>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM