Shadow DOM及自定义标签
参考链接:点我
一、什么是Shadow DOM
Shadow DOM,直接翻译的话就是 影子 DOM
,可以理解为潜藏在 DOM 结构中并且我们无法直接控制操纵的 DOM 结构。类似于下面这种结构
Shadow DOM 可以在浏览器中生成一个独立于DOM树之外的 DOM结构
二、Shadow DOM的结构
1、Shadow host:相当于存放Shadow DOM的容器
2、Shadow root:Shadow DOM的根,它和它的后代元素,都将对用户隐藏,但是它们是实际存在的,在 chrome 中,我们可以通常审查元素去查看它们的具体 DOM 实现。
3、contents:Shadow DOM的具体内容
三、如何创建使用Shadow DOM
1、创建
1 2 3 4 5 | function createShadowDOM(elem) { // var root = elem.createShadowRoot() //已被attachShadow替换 var root = elem.attachShadow({mode: "open" }) // mode为open时对外可以访问 root.appendChild(createComponent( "costom-component" )) // 自定义标签 } |
2、使用
1 2 | <div id= "div" >这里是不显示出来的,如果你看到了,说明浏览器不支持ShadowDOM</div> createShadowDOM(document.querySelector( "#div" )) |
3、获取Shadow DOM
1 | document.querySelector( '#div' ).shadowRoot |
四、用途
1、在编写插件时,需要向DOM中插入新的DOM,但又怕样式或者DOM发生冲突,Shadow DOM的样式以及结构都是对外分开,不会溢出,外部的亦不会侵入
2、登其他自己去发现
五、优缺点
优点:
1、可封装复用
2、不会增加DOM的结构
3、样式独立
缺点:
1、兼容性差
2、不易调试或检查
七、自定义标签
自定义元素:点我
使用es6的class写法,继承 HTMLElement,使用connectedCallback添加方法,使用attributeChangedCallback做属性的改变
注:自定义标签的名称必须是包含一个破折号( - ),并且不能有大写字母
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class CustomElement extends HTMLElement { constructor() { super() this ._name = 'Custom' } connectedCallback() { this .addEventListener( 'click' , e => alert(`Hello, ${ this ._name}!`) ); } attributeChangedCallback(attrName, oldValue, newValue) { if (attrName === 'name' ) { if (newValue) { this ._name = newValue } else { this ._name = 'Custom' } } } } CustomElement.observedAttributes = [ 'name' ] customElements.define( 'costom-component' , CustomElement) |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步