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、创建

function createShadowDOM(elem) {// var root = elem.createShadowRoot() //已被attachShadow替换var root = elem.attachShadow({mode:"open"})// mode为open时对外可以访问root.appendChild(createComponent("costom-component"))// 自定义标签}

2、使用

<div id="div">这里是不显示出来的,如果你看到了,说明浏览器不支持ShadowDOM</div>
createShadowDOM(document.querySelector("#div"))

3、获取Shadow DOM

document.querySelector('#div').shadowRoot

四、用途

1、在编写插件时,需要向DOM中插入新的DOM,但又怕样式或者DOM发生冲突,Shadow DOM的样式以及结构都是对外分开,不会溢出,外部的亦不会侵入

2、登其他自己去发现

五、优缺点

优点:

1、可封装复用

2、不会增加DOM的结构

3、样式独立

缺点:

1、兼容性差

2、不易调试或检查

 七、自定义标签

自定义元素:点我

使用es6的class写法,继承 HTMLElement,使用connectedCallback添加方法,使用attributeChangedCallback做属性的改变

注:自定义标签的名称必须是包含一个破折号( - ),并且不能有大写字母

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)

  

 

转载于:https://www.cnblogs.com/detanx/p/ShadowDOMCustom.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二进制逆向工程师_利用Ghidra逆向分析Go二进制程序(下篇)

(接上文)动态分配字符串结构在第一种情况下&#xff0c;字符串结构是在运行时创建的&#xff0c;为此&#xff0c;需要使用一系列汇编指令在字符串操作之前设置相应的结构。由于指令集的不同&#xff0c;不同的架构之间的结构也是不同的。让我们通过几个案例&#xff0c;来展示…

工艺路线和工序有差别吗_你知道吗?市政道路排水工程的主要工序施工工艺是什么...

易筑教育给排水课程火热招生中&#xff01;张老师微信号&#xff1a;yizhujiaoyu999市政道排工程施工遵循的基本顺序是&#xff1a;先地下&#xff0c;后地上&#xff1b;先深后浅。按照这个顺序&#xff0c;正常的施工顺序为基础处理、排水管道(涵)施工(雨、污水)、道路基层(常…

如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)

如何&#xff1a;从Spring 4.0快速入门以构建简单的REST-Like API&#xff08;演练&#xff09; 关于使用Spring MVC创建Web API的另一篇教程。 不太复杂。 只是一个演练。 生成的应用程序将提供简单的API&#xff0c;将Mongo作为其持久性&#xff0c;并将通过Spring Security进…

01-Web客户端与服务器详解

1、CS与BS 软件使用方式上两种划分  C/S架构 Client/ServerPC客户端、服务器架构 特点&#xff1a;   在服务器当中就主要是一个数据库&#xff0c;把所有的业务逻辑以及界面都交给客户端完成 优点&#xff1a;   较为安全&#xff0c;用户界面丰富&#xff0c;用户体验好…

axi ps读写pl_PL读写DDR:Datamover能干什么

最近发现工程项目中一直在用AXI-DMA。这玩意儿搬数据倒是没问题&#xff0c;就是用axi-lite配置起来非常反人类。。。简单的办法其实是用datamover ip核。这个ip核能干嘛呢。准备写个文章解析一下。由于好多feature没用过&#xff0c;所以仅仅看文档可能理解有误&#xff0c;欢…

在10分钟内在新Mac中设置Java开发环境(更新)

这只是一个小的更新文章&#xff0c;它引用了2个较旧的条目&#xff08; a &#xff0c; b &#xff09;&#xff0c;我将它们合并为一个步骤&#xff0c;就像一步操作&#xff0c;并确保所有功能都在最新的MacOSX 10.9 Mavericks下工作 。 我主要针对的是初次尝试设置其环境的…

linux path 与 classpath 区别

linux path 与 classpath 区别 一、OS依据path中的路径信息来寻找可执行指令&#xff1b; 例如&#xff1a; cat /etc/profile 我们就可以在任意目录执行hadoop / hdfs / yarn / java 等相关命令了 export HADOOP_HOME/opt/hadoop/hadoop-2.6.0 export JAVA_HOME/home/jdk1.8.0…

开启9008端口进入深刷模式

除了前文所述&#xff0c;使用深刷线&#xff0c;还可以用命令开启9008端口&#xff0c;进入深刷模式。 adb reboot edl fastboot oem edl 这个在小米4c上测试ok 下面这个可能用于其他手机。 fastboot reboot emergency http://www.znsjw.net/nd.jsp?id19 小米绕BL锁9008工程…

hashmap为什么用红黑树_要看HashMap源码,先来看看它的设计思想

HashMap 是日常开发中&#xff0c;用的最多的集合类之一&#xff0c;也是面试中经常被问到的 Java 类之一。同时&#xff0c;HashMap 在实现方式上面又有十分典型的范例。不管是从哪一方面来看&#xff0c;学习 HashMap 都可以说是有利无害的。分析 HashMap 的源码的文章在网上…

实现CA和证书申请

文字说明 1 在CA上执行&#xff0c;建立CA cd /etc/pki/CA touch index.txt echo 0F > serial (umask 077;openssl genrsa -out private/cakey.pem 2048) openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 填写多项内容&#xff1a;国家&#xff…

端口如何支持非localhost访问_新特性解读 | MySQL 8.0.19 支持 DNS SRV

转载自公众号&#xff1a;玩转MySQL作者&#xff1a;洪斌MySQL Router 是 InnoDB Cluster 架构的访问入口&#xff0c;在架构部署上&#xff0c;官方给出的建议是 router 与应用端绑定部署&#xff0c;避免 router 单点问题。之前还有客户咨询&#xff0c;能否 router 不与应用…

记录奥运-当今五大Java记录框架之间的竞赛

开发人员&#xff1a;Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实际上是每个服务器端应用程序中古老而固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些应用程序每天可能仅记录…

移动端实现元素拖拽效果插件_基于自然流布局的可视化拖拽搭建平台设计方案...

LowCode 是高效、高性能的拖拽式低代码开发平台. 也是笔者最近一直在研究的方向, 对于可视化搭建平台的实现方案笔者之前写过很多文章, 这里带大家探索一个新方向——基于自然流布局的可视化搭建平台.在我们之前实现的 h5-dooring 搭建平台中, 我们采用了网格布局的方式来实现拖…

07-数据类型

【转】07-数据类型 介绍 存储引擎决定了表的类型&#xff0c;而表内存放的数据也要有不同的类型&#xff0c;每种数据类型都有自己的宽度&#xff0c;但宽度是可选的 详细参考链接&#xff1a;http://www.runoob.com/mysql/mysql-data-types.html mysql常用数据类型概括&#x…

yii::$app-mongodb 查询纪录数_老詹总决赛有多强?12项数据领先乔丹科比,已握10项数据纪录...

勒布朗詹姆贡献了38分16个篮板和10个助攻的狂暴三双数据&#xff0c;并率领湖人淘汰了掘金&#xff0c;这使得他迈进了职业生涯第10次总决赛舞台。我们都知道&#xff0c;詹姆斯几乎统治着NBA季后赛大部分数据纪录&#xff0c;事实上&#xff0c;他在总决赛同样如此。根据《sta…

前端共享桌面_2020 前端学习路线总结,哎呦,不错哦!

2020 前端学习路线总结在 GitHub 看到一个很不错的前端学习路线图&#xff08;roadmap&#xff09;&#xff0c;从前端基础到前端工程化&#xff0c;再到跨端&#xff0c;都有知识点的覆盖&#xff0c;非常推荐阅读。图下面是我翻译的一个文字版&#xff0c;可以先看图再看文字…

Confluence 6 高级性能诊断

请在你的系统服务请求中包括下面所有的信息&#xff0c;如果可能的话&#xff0c;你也可以在请求中包括你认为最有可能出现的问题。这样的话&#xff0c;可以避免我们进一步对你系统的问题进行询问。 系统信息 Confluence 服务器 你系统信息的屏幕截图 Confluences Administrat…

RequireJS使用注意地方

使用RequireJS做异步模块加载&#xff0c;有几点值得注意的地方&#xff1a; 1.模块定义两种写法 1. 存在依赖的函数式定义 如果模块存在依赖&#xff1a;则第一个参数是依赖的名称数组&#xff1b;第二个参数是函数&#xff0c;在模块的所有依赖加载完毕后&#xff0c;该函…

WildFly上具有AngularJS的Java EE 7和Java WebSocket API(JSR 356)

这篇博客文章描述了用于WebSocket协议的Java API&#xff08;JSR 356&#xff09; &#xff08;这是Java EE 7平台的四个最新JSR之一&#xff09;&#xff0c;并提供了部署在WildFly 8上并可以在OpenShift上在线获得的具体应用程序。 [FR]版本的法语&#xff08; HTML或PDF &a…

日期加减加1天_2小时整理了13个时间日期函数,动图演示简单易学,收藏备用吧...

Hello&#xff0c;大家好&#xff0c;今天跟大家整理汇总了13个工作中经常用到的日期与时间函数的使用方法&#xff0c;学会它们几乎可以解决所有工作中遇到的&#xff0c;关于日期与时间提取与转换的问题。话不多说&#xff0c;让我们直接开始吧一、了解时间与日期的本质工作中…