attachShadow 是在支持元素上创建 Shadow Root 的方法,需指定 open/closed 模式,仅能调用一次;支持 div、span、自定义元素等,不支持 img、input 等替换元素;挂载后可操作 DOM 与样式,但重复调用或 SSR 中使用会报错。

attachShadow 是用于在标准 DOM 元素上动态创建并挂载 Shadow Root 的核心方法,它让元素具备 Shadow DOM 能力,实现样式与结构的封装隔离。
基本用法:调用 attachShadow 并指定 mode
必须在支持 Shadow DOM 的元素(如 示例: Hello from Shadow DOM 并非所有元素都支持 挂载成功后, 使用中容易踩坑的点:、自定义元素等)上调用,且只能调用一次。关键参数是 { mode: 'open' } 或 { mode: 'closed' }:
element.shadowRoot 返回实例);null,外部无法直接访问 Shadow Root(调试和维护受限,一般不推荐)。
const shadow = host.attachShadow({ mode: 'open' });
shadow.innerHTML = '常见可挂载 Shadow Root 的元素类型
attachShadow。以下元素原生支持(主流浏览器均兼容):、、 等;
、、;customElements.define('my-card', MyCard) 后,其实例可调用;、、、 等替换元素(replaced elements)不支持,会抛出 NotSupportedError。动态创建后立即操作 Shadow DOM 内容
shadow 即为标准 DocumentFragment,支持所有 DOM 操作:
innerHTML 快速注入 HTML 字符串;appendChild()、append() 添加节点;querySelector() 在 Shadow 内部查找(作用域仅限于该 Shadow Root); 实现局部样式封装,例如:
const style = document.createElement('style');
style.textContent = 'p { color: blue; }';
shadow.append(style, document.createElement('p'));
注意事项与典型错误
attachShadow 会报错:Failed to execute 'attachShadow' on 'Element': Shadow root has already been attached;host.shadowRoot?.remove(),再重新 attachShadow(注意 closed 模式下无法获取 shadowRoot);connectedCallback 或 DOMContentLoaded 后)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











