如何获取 Shadow DOM 中的元素?

5

我将HTML内容放在影子根内,这是通过microblink SDK动态生成的。

我需要对#fileBtn添加addEventListener,以便在单击时执行某些操作。但是由于它是影子根,我无法访问DOM属性。同时,我正在使用reactjs实现此功能。

<microblink-ui-web tabs="true" autoscroll="true" style="height: 319.562px;">
    #shadow-root (open)
    <div class="container root" max-width="500px 600px 630px">
    <div class="container main">
      <div class="container intro dropzone active">
        <div class="flex-vertical">
          <p class="intro-label">
            <slot name="labels.chooseInputMethod">Choose input method</slot>
          </p>
          <div class="flex-horizontal">
            <input
              type="file"
              accept="image/png,image/gif,image/bmp,image/jpeg,image/x-png,image/vnd.wap.wbmp"
              id="file"
            />
            <button type="button" class="intro-button" id="fileBtn">
            </button>
            <button type="button" class="intro-button" id="cameraLocalBtn">
            </button>
          </div>
        </div>
      </div>
    </div>
    </div
></microblink-ui-web>

谢谢提前!!!
1个回答

8
使用 shadowRoot 属性来访问 Shadow DOM 内容。
let mb = document.querySelector( 'microblink-ui-web' )
mb.shadowRoot.querySelector( '#fileBtn' ).addEventListener( 'click', clicked )

function clicked( ev ) {
    console.log( ev.target.id + 'clicked' )
}

1
你好,有没有办法可以更改影子根内部类的CSS? - Dark Knight
是的,您可以在影子 DOM 中添加样式或链接元素,或者将构造样式表应用于它。 - Supersharp
请问您能展示给我如何做吗?还是我应该提一个新问题? - Dark Knight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接