假设我创建并插入了一个像这样的元素
<template id="react-web-component">
<span>template stuff</span
<script src="/static/js/bundle.js" type="text/javascript"></script>
</template>
<script>
(function (window, document) {
const doc = (document._currentScript || document.currentScript).ownerDocument;
const proto = Object.create(HTMLElement.prototype, {
attachedCallback: {
value: function () {
const template = doc.querySelector('template#react-web-component').content;
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.appendChild(template.cloneNode(true));
},
},
});
document.registerElement('react-web-component', { prototype: proto });
})(window, document);
</script>
<react-web-component></react-web-component>
现在我想用querySelector
来访问我元素的 open 影子dom。像这样:
document.querySelector('react-web-component::shadow')
但这不起作用。还有其他办法吗?
编辑以回应@Supersharp的回答
对不起,我没说清楚。我正在使用webpack的
style-loader
,它只接受与document.querySelector
一起使用的CSS选择器,所以我要问的是CSS选择器我可以用这种方式。
答案 0 :(得分:3)
通过Shadow主机的shadowRoot
属性获取它:
document.querySelector('react-web-component').shadowRoot
<强>更新强>
曾经有过这种CSS选择器,但现在它已被弃用。
也许您可以尝试使用普通DOM而不是Shadow DOM。
答案 1 :(得分:1)