如何遍历影子DOM中的元素

时间:2019-05-05 14:25:11

标签: html html5 shadow-dom

我有

div id=outer
  #shadowRoot
    div id=inner
    button

在按钮的单击处理程序中,我要引用div“内部”。在非ShadowDom世界中,该值为document.getElementById('inner'),但是在Shadow DOM世界中等效的是什么?

NB。这是从自定义元素内部访问的。我不是要从外面刺穿影子DOM。

1 个答案:

答案 0 :(得分:2)

您可以使用绝对路径:使用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>