带你读《现代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

相关文章
|
25天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
11天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
12天前
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
1月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
45 4
|
1月前
|
JavaScript 前端开发 API
探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
【10月更文挑战第5天】探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
|
1月前
|
人工智能 JavaScript 前端开发
使用Node.js模拟执行JavaScript
使用Node.js模拟执行JavaScript
|
30天前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
30天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
17 0
|
1月前
|
JavaScript 前端开发 容器
js之dom学习
js之dom学习
35 0
|
24天前
|
JavaScript
HTML DOM 节点树
HTML DOM 节点是指在 HTML 文档对象模型中,文档中的所有内容都被视为节点。整个文档是一个文档节点,每个 HTML 元素是元素节点,元素内的文本是文本节点,属性是属性节点,注释是注释节点。DOM 将文档表示为节点树,节点之间有父子和同胞关系。