【发布时间】:2019-08-01 18:34:00
【问题描述】:
我有一个带有影子 DOM 的自定义元素,它监听属性 target 的变化。target 应该是我的组件应该附加到的元素的 ID。
我尝试使用querySelector 和getElementById 来获取外部DOM 的元素,但它总是返回null。
console.log(document.getElementById(target));
console.log(document.querySelector('#' + target));
以上都返回null。
有没有办法从 shadow DOM 中获取对父文档中元素的引用?
【问题讨论】:
-
显示完整的事件代码?
-
好吧,问题不同了,我的组件在另一个带有 shadowDOM 的 web 组件中,这就是为什么
querySelector和getElementById都不起作用的原因。 -
target引用的元素是在DOM中还是在别人的shadowDOM中?document.getElementBuId不会遍历 shadowDOM,因此无法在 shadowDOM 中找到元素。如果该元素在 your shadowDOM 中,那么您将使用this.shadowRoot.getElementById(target)。您能否在问题中提供更多示例,以便我们查看物品的位置? -
@Intervalia 这两个影子 DOM 都是“我的”。由于我正在寻找的元素也在 shadow dom 中(不管是哪一个),所以没有找到。
-
如果您想在其 ShadowDOM 之外(上方)找到自定义元素的 parentNode(就像 .
closest( )在文档 DOM 中所做的那样),您可以向上遍历 DOM 树(跨越 shadowDOM 边界)使用此代码:stackoverflow.com/questions/54520554/…
标签: javascript web-config shadow-dom