自定义元素,<template>
和<content>
元素是互补的。它们可以一起使用,也可以单独使用。
为了定义custom-element
标签的 UI:
- 在创建时,定义一个Shadow DOM,
template
应用标签的内部 HTML ,
- 使用
content
内部的标签从原始DOMtemplate
中获取数据值。
例子
当您(单击按钮)注册元素时,您的浏览器将通过调用其方法custom-hello
来实例化该元素。div
createdCallback
在内部createdCallback
,HTML 模板被添加到Shadow DOM根目录。
这个Shadow DOM掩盖了原始 DOM,但可以通过标签显示有用的值(这里: #prefix和#name元素) 。content
register.onclick = function ()
{
var proto = Object.create( HTMLElement.prototype )
proto.createdCallback = function ()
{
var root = this.createShadowRoot()
root.innerHTML = document.querySelector( "template" ).innerHTML
}
document.registerElement( "custom-hello", { prototype: proto } )
}
<template>
<h3>
Hello, <content select='#prefix'></content> <content select='#name'></content>!
</h3>
</template>
<button id='register'>Register custom-hello</button>
<div>
custom-hello:
<custom-hello>
<span id="prefix">Miss</span>
<span id="name">Kat</span>
<span id="age">30</span>
</custom-hello>
</div>