--- title: ShadowRoot slug: Web/API/ShadowRoot tags: - API - Interface - Reference - ShadowRoot - Web Components translation_of: Web/API/ShadowRoot ---
{{APIRef('Shadow DOM')}}
Shadow DOM API 的 ShadowRoot
接口是一个 DOM 子树的根节点, 它与文档的主 DOM 树分开渲染。
你可以通过使用一个元素的 {{domxref("Element.shadowRoot")}} 属性来检索它的参考,假设它是由 {{domxref("Element.attachShadow()")}} 创建的并使 mode
设置为 open
.
ShadowRoot
附加的宿主 DOM 元素。ShadowRoot
内部的 DOM 树。ShadowRoot
的模式——可以是 open
或者 closed
。这定义了 shadow root 的内部实现是否可被 JavaScript 访问及修改 — 也就是说,该实现是否公开,例如,{{HTMLElement("video")}} 标签内部实现无法被 JavaScript 访问及修改。ShadowRoot
接口包含了下列从{{domxref("DocumentOrShadowRoot")}} mixin中定义的属性. 请注意它现在仅在Chrome浏览器中应用; 其它的浏览器仍在{{domxref("Document")}}接口实现.
ShadowRoot
接口包含了下列几个在 {{domxref("DocumentOrShadowRoot")}} mixin中定义的方法. 请注意它现在仅在Chrome浏览器中应用; 其它的浏览器仍在{{domxref("Document")}}接口实现.
下面的这段代码是从我们的 life-cycle-callbacks 示例 (查看在线示例)中提取出来的, 它创建了一个由元素的属性指定的大小相等的正方形.
Inside the <custom-square>
element's class definition we include some life cycle callbacks that make a call to an external function, upateStyle()
, which actually applies the size and color to the element. You'll see that we are passing it this
(the custom element itself) as a parameter.
connectedCallback() { console.log('Custom square element added to page.'); updateStyle(this); } attributeChangedCallback(name, oldValue, newValue) { console.log('Custom square element attributes changed.'); updateStyle(this); }
In the updateStyle()
function itself, we get a reference to the shadow DOM using {{domxref("Element.shadowRoot")}}. From here we use standard DOM traversal techniques to find the {{htmlelement("style")}} element inside the shadow DOM and then update the CSS found inside it:
function updateStyle(elem) { var shadow = elem.shadowRoot; var childNodes = shadow.childNodes; for(var i = 0; i < childNodes.length; i++) { if(childNodes[i].nodeName === 'STYLE') { childNodes[i].textContent = 'div {' + 'width: ' + elem.getAttribute('l') + 'px;' + 'height: ' + elem.getAttribute('l') + 'px;' + 'background-color: ' + elem.getAttribute('c') + ';' + '}'; } } }
Specification | Status | Comment |
---|---|---|
{{SpecName('DOM WHATWG','#interface-shadowroot','Interface ShadowRoot')}} | {{Spec2('DOM WHATWG')}} |
{{Compat("api.ShadowRoot")}}