新闻中心
深入J*aScript_Shadow DOM API
Shadow DOM 是 Web Components 的核心技术,提供独立的 DOM 树和样式隔离。通过 attachShadow() 方法绑定到宿主元素,支持 'open' 或 'closed' 模式,实现封装性。常与自定义元素结合使用,构建可复用组件。其内部样式不泄露、外部样式不侵入,确保模块化。利用 可实现内容分发,支持默认内容与命名插槽,提升灵活性。事件在 Shadow DOM 内触发会冒泡至外层,但 event.target 被重定向为宿主元素以维护封装,原始路径可通过 e.composedPath() 获取。仅当 composed 为 true 时,自定义事件才能跨越 Shadow Boundary。掌握 Shadow DOM 有助于减少样式冲突、提升组件复用性与项目可维护性,是跨框架开发的有力工具。

Shadow DOM 是 Web Components 技术的核心之一,它为开发者提供了一种将封装的 DOM 树附加到元素上的方式,同时隔离样式和结构。在 J*aScript 中操作 Shadow DOM API 可以实现高度模块化、可复用的组件设计,尤其适用于构建复杂前端应用。
什么是 Shadow DOM
Shad
ow DOM 允许你在一个普通 DOM 元素内部创建一个独立的“影子”DOM 树。这个影子树与主文档的 DOM 隔离,拥有自己的样式作用域和节点结构,不会受到外部 CSS 的影响,也不会轻易被 J*aScript 干扰。
每个 shadow root 都绑定到一个宿主元素(host),通过 attachShadow() 方法创建:
let shadow = element.attachShadow({mode: 'open'});// 或 {mode: 'closed'}
mode 为 'open' 时,可以通过 J*aScript 从外部访问 shadow root;'closed' 则不可访问,增强了封装性。
创建并使用 Shadow DOM
实际开发中,通常结合自定义元素(Custom Elements)一起使用 Shadow DOM。以下是一个简单示例:
class MyWidget extends HTMLElement {constructor() {
super();
// 创建 shadow root
this.shadow = this.attachShadow({ mode: 'open' });
// 添加内容
const wrapper = document.createElement('div');
wrapper.textContent = 'Hello from Shadow DOM!';
const style = document.createElement('style');
style.textContent = `
div {
color: blue;
font-size: 16px;
}`;
this.shadow.appendChild(style);
this.shadow.appendChild(wrapper);
}
}
// 定义自定义元素
customElements.define('my-widget', MyWidget);
在 HTML 中使用:
页面上会显示蓝色文字,且其样式不会泄露到外部,外部样式也不会覆盖它。
样式隔离与插槽(Slots)机制
Shadow DOM 最大的优势是样式隔离。内部定义的 CSS 不会影响外部,外部也无法直接修改内部结构。但有时需要让外部传入内容并渲染在 shadow tree 内部,这就用到
例如支持模板插入:
Zend API:深入PHP内核
Zend API:深入PHP内核
341
查看详情
this.shadow.innerHTML = ``;
然后在 HTML 中:
我的标题
这是传入的内容
slot 机制实现了内容分发(content distribution),使组件更灵活,类似 React 的 children 概念,但在原生 DOM 层实现。
事件在 Shadow DOM 中的行为
事件可以从 Shadow DOM 内部触发并冒泡到外层,但其目标(event.target)会被重定向,以维持封装性。这种行为称为“事件重定向”。
比如在 shadow 内点击按钮:
button.addEventListener('click', (e) => {console.log(e.target); // 外部看到的是 host 元素,而非 button
});
若需访问原始事件目标,可用 e.composedPath() 获取事件路径:
const path = e.composedPath();console.log(path); // 包含 shadow 内部的真实节点
注意:只有设置为 composed: true 的自定义事件才能穿越 Shadow DOM 边界向外传播。
基本上就这些。掌握 Shadow DOM API 能帮助你写出真正封装良好的组件,减少样式冲突,提升项目可维护性。虽然现代框架如 React、Vue 有自己的抽象模型,但在需要极致性能或跨框架复用时,原生 Shadow DOM 仍是强大工具。
以上就是深入J*aScript_Shadow DOM API的详细内容,更多请关注其它相关文章!
# 但在
# o2o营销推广途径
# 天津公司网站建设
# 优秀网站建设哪家快
# 网站建设方正
# 个人如何网站优化服务设计
# 广州外贸推广 营销招聘信息
# 推广网络营销公司a来咨61下拉
# 营销推广招标需求分析
# 网站推广手段怎么写
# 海南热点关键词排名
# 背景色
# 如何实现
# 绑定
# 弹出
# 重定向
# css
# 复用
# 插槽
# 自己的
# 自定义
# 封装性
# 前端应用
# 作用域
# 工具
# app
# 前端
# html
# java
# javascript
# react
# vue
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
AO3最新入口2025公告_AO3中文官网合集
拼多多赚钱渠道_拼多多收益来源
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
圆通快递查询实时追踪 圆通物流包裹状态快速查看
解决J*aScript中重复选择项的确认对话框显示问题
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
实现分段式页面滚动导航:CSS与J*aScript教程
动漫岛观看全网网 动漫岛在线正版动漫入口
CSS Box Model与弹性按钮:维持布局稳定的动画实践
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
DLsite中文平台入口 DLsite官网内容在线查看
抓大鹅无需下载版 抓大鹅秒玩版入口
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
age动漫网站入口 age动漫官网直接访问入口
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
海棠电脑版入口_通过电脑访问海棠官网阅读
将HTML动态表格多行数据保存到Google Sheet的教程
微信群消息显示延迟如何解决 微信群消息刷新优化方法
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
淘宝支付提示失败如何解决 淘宝支付流程优化方法
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
动漫花园资源网使用步骤_动漫花园资源网下载流程
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
J*aScript中赋值与自增运算符的复杂交互与执行机制
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议
解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
Go语言中JSON数据解析与字段访问教程
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
Win11怎么关闭快速启动_Win11彻底关机设置教程
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
Golang如何安装Swagger工具_GoSwagger文档生成环境
Shopware订单对象中获取产品自定义字段的正确方法
如何在 Windows 11 中启动游戏手柄设置
《GTA6》开发画面疑似泄露!这次可不是AI了
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
Pyrogram与g4f集成:异步编程实践与常见错误解决
Eclipse怎么运行工程_Eclipse工程运行配置说明
excel怎么制作工资条 excel快速生成工资条的方法
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问


2025-11-21
浏览次数:次
返回列表