javascript - 如何遍历 shadow DOM 中的元素

标签 javascript html web-component shadow-dom

我有

div id=outer
  #shadowRoot
    div id=inner
    button

在按钮的单击处理程序中,我想引用 div“内部”。在非 shadowDom 世界中,这将是 document.getElementById('inner') ,但影子 DOM 世界中的等价物是什么?

注意。这是从自定义元素中访问的。我不想从外部刺穿影子 DOM。

最佳答案

您可以使用绝对路径:使用 shadowRoot获取 Shadow DOM 内容。

document.querySelector( 'div#outer' ).shadowRoot.querySelector( 'div#inner' )

或者相对路径:使用getRootNode()获取 Shadow DOM 根
event.target.getRootNode().querySelector( 'div#inner' )

例子:

outer.attachShadow( { mode: 'open' } )
    .innerHTML = `
        <div id=inner></div>
        <button>clicked</button>
    `
    
outer.shadowRoot.querySelector( 'button' ).onclick = ev =>
  ev.target.getRootNode().querySelector( 'div#inner' ).innerHTML = 'clicked'
<div id=outer></div>

关于javascript - 如何遍历 shadow DOM 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992972/

相关文章:

javascript - 设置cookie只播放一次动画(jquery)

javascript - 语义 UI 模态高度太长

javascript - Web组件: dynamic content inside <template>

javascript - HTML 自定义元素子容器

javascript - jQuery 仅获取可见字段的表单数据

javascript - "Jump dictionaries",switch 语句,或者如何在没有 eval 的情况下执行 "jump dictionaries"?

python - django 添加占位符文本到表单字段

javascript - 在 chrome 扩展中加载 Polymer 1.0 时出现问题

javascript - Vue 和 Laravel 表单验证未返回 422 响应

html - CSS:@media 查询的最大宽度不适用于某些 div 标签