首页 > 解决方案 > 如何遍历影子 DOM 中的元素

问题描述

我有

div id=outer
  #shadowRoot
    div id=inner
    button

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

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

标签: javascripthtmlweb-componentshadow-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>


推荐阅读