带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(1)

简介: 带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(1)

二十二、JS Shadow DOM:创建封装的组件和样式隔离

引言

在现代的 Web 开发中,组件化和样式隔离是非常重要的概念。为了解决这些问题,Web 标准引入了 Shadow DOM 技术。Shadow DOM 允许开发者创建封装的组件,并将组件的样式和行为隔离在组件的 Shadow DOM 内部。本文将详细介绍 Shadow DOM 的属性和 API,并探讨其在实际开发中的应用场景。

1. 什么是 Shadow DOM

Shadow DOM 是一项 Web 标准,用于创建封装的组件并实现样式隔离。它允许将组件的 HTML 结构、样式和行为封装在一个独立的 DOM 树中,从而与主文档的 DOM 树相互隔离。通过这种方式,开发者可以创建具有独立样式和行为的组件,而不用担心与其他组件或主文档的样式冲突。

2. Shadow DOM API

Shadow DOM 提供了一系列用于操作和管理 Shadow DOM 的 API。

1)添加 Shadow Root:attachShadow(options)

attachShadow 方法用于将 Shadow DOM 附加到指定的元素上。它接收一个 options 参数,用于指定 Shadow DOM 的模式。

const hostElement = document.getElementById('host-element');const shadowRoot = hostElement.attachShadow({ mode: 'open' });

2)获取 Shadow Root:shadowRoot

shadowRoot 属性返回与元素关联的 Shadow Root。

 

const shadowRoot = hostElement.shadowRoot;

3) 在 Shadow Root 中查询元素:querySelector(selector)

querySelector 方法在 Shadow Root 内部查找匹配指定选择器的第一个元素。

 

const element = shadowRoot.querySelector('.my-element');

4 在 Shadow Root 中查询元素列表:querySelectorAll(selector)

querySelectorAll 方法在 Shadow Root 内部查找匹配指定选择器的所有元素。

 

const elements = shadowRoot.querySelectorAll('.my-element');

5 获取 Shadow Root 的宿主元素:host

host 属性返回与 Shadow Root 相关联的宿主元素。

 

const hostElement = shadowRoot.host;

3. Shadow DOM 应用场景

Shadow DOM 在 Web 开发中有许多实际应用场景,下面是几个常见的场景:

1)Web 组件开发

Shadow DOM 可以帮助开发者创建封装的 Web 组件,确保组件的样式和行为不会被外部影响。以下是一个示例,演示如何使用 Shadow DOM 创建一个自定义按钮组件:

 

/* 组件的样式 */
    .custom-button {
      background-color: 007bff;
 color: white;
      padding: 10px 20px;
      border-radius: 4px;
      cursor: pointer;
    }
    // 创建 Shadow Root
    const hostElement = document.getElementById('custom-button-container');
    const shadowRoot = hostElement.attachShadow({ mode: 'open' });
    // 创建自定义按钮
    const button = document.createElement('button');
    button.classList.add('custom-button');
    button.textContent = 'Click me';
    // 将按钮添加到 Shadow Root 中
    shadowRoot.appendChild(button);

 

在上面的示例中,我们创建了一个 Shadow Root,并将其附加到 custom-button-container 宿主元素上。然后,我们在 Shadow Root 中创建了一个自定义按钮,并将其添加到 Shadow Root 中。


带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(2)

https://developer.aliyun.com/article/1349525?groupCode=tech_library

相关文章
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
638 57
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
445 19
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
880 24
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
15390 23
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
332 32
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
406 3
springboot解决js前端跨域问题,javascript跨域问题解决
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
1091 2
2024年5月node.js安装(winmac系统)保姆级教程