深入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 有助于减少样式冲突、提升组件复用性与项目可维护性,是跨框架开发的有力工具。

深入javascript_shadow dom api

Shadow DOM 是 Web Components 技术的核心之一,它为开发者提供了一种将封装的 DOM 树附加到元素上的方式,同时隔离样式和结构。在 J*aScript 中操作 Shadow DOM API 可以实现高度模块化、可复用的组件设计,尤其适用于构建复杂前端应用。

什么是 Shadow DOM

Shadow 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内核

Zend API:深入PHP内核

Zend API:深入PHP内核 341 查看详情 Zend API:深入PHP内核 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的详细内容,更多请关注其它相关文章!


# 但在  # 西藏网站建设哪个好  # 什么去做一个网站推广呢  # 大庆抖音seo加盟必看  # 广东seo工具  # 广东seo排名合作商家  # 内蒙古天猫网站建设  # 网站推广有什么方式  # 测绘网站建设银行实习  # 内江如何建设网站  # 新媒体营销推广软文范文  # 的是  # 应如何  # 如何使用  # 绑定  # 重定向  # css  # 复用  # 插槽  # 自己的  # 自定义  # 封装性  # 前端应用  # 作用域  # 工具  # app  # 前端  # html  # java  # javascript  # react  # vue 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《下一站江湖2》武器获取方法  J*aScript调试技巧_性能分析与内存快照  人教版电子教材在线获取指南  《edge浏览器》关闭翻译功能方法  口腔诊所管理软件推荐  申通快件单号查询平台 申通包裹物流动态跟踪  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  Golang如何使用log记录日志信息_Golang log日志记录方法总结  《下一站江湖2》独孤剑诀习得方法  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  芒果TV官网登录入口 芒果TV官方网站登录入口  路由器DNS怎么设置最快 优化DNS提升上网速度教程  《跳跳舞蹈》循环播放方法  如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计  实现二叉树的层序插入:基于树大小的路径导航  《鹿路通》退余额方法  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  解决CSS background 属性中 cover 关键字的常见误用  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  c++中的const关键字用法大全_c++ const正确使用指南  《搜书吧》阅读书籍方法  《百果园》充值余额方法  实时数据流中高效查找最小值与最大值  快手缓存清理方法  《下一站江湖2》风神腿获取攻略  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  在React中正确处理HTML input type="number"的数值类型  使用Python和NLTK从文本中高效提取名词的实用教程  电子白板帮助菜单使用指南  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  《procreate》绘制渐变效果教程  创建快捷方式启动系统保护  《我的恋爱逃生攻略》中文名字输入方法  《土豆雅思》修改密码方法  《豆瓣》私信用户方法  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  企查查官网和爱企查 企查查企业查询官网入口  重返未来:1999卡戎全方位攻略  荣耀magicv5怎么上手测评  睡觉时心跳快是什么原因 夜间心悸如何应对  《理想汽车》权限管理设置方法  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  鸿蒙单条备忘录如何加密  之了课堂app做题入口  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  《梦想世界:长风问剑录》药师一图流分享  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  《小宇宙》标记不友善评论方法 

 2025-11-21

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.