html span box shadow,Shadow DOM的简单实现

紧接Shadow DOM的简介,介绍关于Shadow DOM的使用方法。

一、例子

hello

world

像这段HTML,在浏览器中被解析成DOM时,每一个元素就是一个节点,整体构成了一个节点树。

而Shadow DOM可以让我们自己创建节点树,依旧是以上的HTML代码,加上以下的JS代码:var oBox = document.querySelector('#Box');

// 创建 shadow DOM

var shadowRoot = oBox.createShadowRoot();

shadowRoot.innerHTML = 'JavaScript';

首先我们选取了一个id是Box的元素作为宿主对象(shadow host),然后使用createShadowRoot()方法给宿主对象增加了一个shadow root的新节点,影子根节点作为影子树的第一个节点,其他的节点都是它的子节点。在控制台下得到以下结构:

dec6ee2006feaa921cfd198f8c026b69.png

当然在页面上发现,world并没有渲染出来,显示的是JavaScript。也就是说宿主对象并没有被渲染,取而代之的是内部的元素。

加入我们想加入其他更多的元素的话,为何不使用原生的创建元素的方式试下呢?var oBox = document.querySelector('#Box');

var shadowRoot = oBox.createShadowRoot();

shadowRoot.textContent = 'JavaScript';

var html = document.createElement('span');

html.textContent = ',HTML';

var css = document.createElement('span');

css.textContent = ',CSS';

shadowRoot.appendChild(html);

shadowRoot.appendChild(css);

// 或者直接

//shadowRoot.innerHTML = 'JavaScript,HTML,CSS';

我们使用了原生的createElement()方法创建了元素并添加到影子DOM下,使用了textContent给元素赋值了内容(textContent用法不说啦)。当然,也可用innerHTML一步到位。此时,HTML的结构是这样的,

9c931b3c4fb970a39e95adcf07eead97.png

我们发现Shadow DOM和普通的DOM似乎没有太大的区别,操作普通DOM的方式在这都可以使用。当然,宿主元素还是没有被渲染出来。

二、content 标签

在前面的例子中,我们使用操作普通DOM的API给影子DOM添加了一些DOM元素,并且他们也能成功的在页面上显示出来。

world

hello,

var oBox = document.querySelector('#Box');

var shadowRoot = oBox.createShadowRoot();

var template = document.querySelector('.Box-template');

shadowRoot.appendChild(document.importNode(template.content,true));

在这,我们使用一个模板标签来创建Shadow DOM中的元素,取代使用繁琐的原生方法。而templete中的标签作为一个插入点,将宿主对象的内容展示出来了。我们会发现这种方式十分的有用。那么,当我们需要多个插入点时,该怎么办?

三、select属性

HTML

CSS

JavaScript

Angular、Node

Java

PHP

// js代码未改变

var oBox = document.querySelector('#Box');

var shadowRoot = oBox.createShadowRoot();

var template = document.querySelector('.Box-template');

shadowRoot.appendChild(document.importNode(template.content,true));

28329a0bc4fa07bd10df65e7ec1200cf.png

在使用多个插入点时,由于每个定义的字段都需要特定的内容,所以我们使用select属性告诉  标签有选择性的插入内容。select属性使用 CSS 选择器来选取想要展示的内容。也就是说,会在影子宿主里寻找任何样式名称 html的元素。如果找到一个匹配的元素,其就会将这个元素渲染到shadow DOM中对应的标签中去。

四、改变顺序

通过插入点,我们不必修改 content 内容的结构而改变渲染的顺序。因为内容存在于影子宿主中,而呈现的方式存在于影子根也就是 shadow DOM 中。

通交换templete中的select值,我们得到了一组重排的数据。

c8bf7523a022a9bbc2e28d560164c765.png

五、贪心插入点

前面的例子中,我们使用作为其他没有匹配内容的插入点,这种方式被称为通配符选择器。当然,以下三种写法都是相同的:    

注:模板标签,这个标签目前在非 IE 的浏览器下都得到支持,主要有四个特性:本文中利用模板为 shadow DOM 填充内容,省去了通过 JS 加载的麻烦。注意文中使用.content 属性来导出模板的内容,并通过importNode()方式对模板进行了深拷贝。惰性:在使用前不会被渲染。

无副作用:在使用前,模板内部的各种脚本不会运行、图像不会加载等。

内容不可见:模板的内容不存在于文档中,使用选择器无法获取。

可被放置于任意位置:即使是 HTML 解析器不允许出现的位置,例如作为  的子元素。

总结

以上是编程之家为你收集整理的Shadow DOM的简单实现全部内容,希望文章能够帮你解决Shadow DOM的简单实现所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现弹窗编辑资料,可以使用HTML和CSS来创建自定义弹窗,并使用JavaScript来控制其显示和隐藏以及修改弹窗内容。 以下是一个简单实现方法: 1. 创建HTML结构 在HTML文件中创建一个div元素,用于作为弹窗的容器,并添加需要编辑的资料表单。 ```html <div id="edit-modal" class="modal"> <div class="modal-content"> <h2>Edit Profile</h2> <form> <label for="name">Name:</label> <input type="text" id="name" name="name" placeholder="Enter your name"> <label for="email">Email:</label> <input type="email" id="email" name="email" placeholder="Enter your email"> <button type="submit">Save</button> </form> </div> </div> ``` 2. 创建CSS样式 为弹窗和其内容添加样式,例如设置弹窗为固定位置,并使用flex布局来居中显示其内容。 ```css .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; justify-content: center; align-items: center; } .modal-content { background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); display: flex; flex-direction: column; align-items: center; } .modal-content form { display: flex; flex-direction: column; align-items: center; } .modal-content label { margin-bottom: 10px; } .modal-content input { padding: 5px; border: 1px solid #ccc; border-radius: 5px; margin-bottom: 20px; } .modal-content button { padding: 10px; background-color: #007bff; color: #fff; border: none; border-radius: 5px; cursor: pointer; } ``` 3. 创建JavaScript代码 使用JavaScript来控制弹窗的显示和隐藏,并在需要时修改弹窗中的内容。 ```javascript // 获取弹窗元素和关闭按钮元素 var editModal = document.getElementById("edit-modal"); var closeModalBtn = document.getElementById("close-modal-btn"); // 当点击编辑按钮时,显示弹窗 document.getElementById("edit-btn").addEventListener("click", function() { editModal.style.display = "flex"; }); // 当点击关闭按钮时,隐藏弹窗 closeModalBtn.addEventListener("click", function() { editModal.style.display = "none"; }); // 当表单提交时,保存编辑内容并隐藏弹窗 document.querySelector("form").addEventListener("submit", function(event) { event.preventDefault(); // 保存编辑内容的代码 editModal.style.display = "none"; }); ``` 通过以上三个步骤,就可以实现一个简单的弹窗编辑资料功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值