javascript - 如何从 Shadow dom 内部获取ElementById

标签 javascript shadow-dom

每当我尝试在影子 dom 脚本标记内使用 document.getElementById 时,我总是得到 null 我看了问题herehere ,但没有一个答案有帮助。

现在我正在使用这个脚本,但我很确定有更好的方法来做到这一点。

window.document.body.getElementsByClassName('calculator')[0].getElementsByClassName('content')[0].shadowRoot.getElementById('test')

最佳答案

这就是在影子 DOM 中使用选择器的方式。您必须首先找到 shadowRoot,然后从中调用 getElementById

customElements.define("with-shadowroot", class extends HTMLElement {  
    constructor() {
        super()
          .attachShadow({ mode: 'open' })
          .innerHTML = `<div><div id="some-div">I'm inside shadowDOM!</div></div>`;
    }
});

console.log(document.getElementById('some-div'));

const divs = document.getElementsByTagName('with-shadowroot');
console.log(divs[0].shadowRoot.getElementById('some-div'));
<with-shadowroot></with-shadowroot>

关于javascript - 如何从 Shadow dom 内部获取ElementById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763641/

相关文章:

javascript - 从外部看 Shadow DOM 样式

javascript - 如何在 tone.js 中为正在播放的音符添加事件监听器

javascript - 使用 Javascript 删除事件监听器

javascript - 如何通过 JavaScript 获取 HTML 阴影元素的尺寸

javascript - 使用 AngularJS 跟踪和统计点击次数并发布到 MongoDB

javascript - 如何获取onBeforeUnload的返回值

javascript - 如何在多个影子根之间共享单个样式表引用、css 变量或 css 规则?

javascript - Angular 2 原生 View 封装

javascript - 我如何查看当前使用 chrome 检查器运行的 javascript?

javascript - 如何在鼠标悬停在另一个标签上时切换 div 的可见性