Reputation: 22286
I have
div id=outer
#shadowRoot
div id=inner
button
In the click handler of the button, I want to reference the div "inner". In a non shadowDom world, this would be document.getElementById('inner')
, but what is the equivalent in a shadow DOM world?
NB. This is accessing from within the custom-element. I am not trying to pierce the shadow DOM from outside.
Upvotes: 5
Views: 3427
Reputation: 31161
You could use the absolute path: use shadowRoot
to get the Shadow DOM content.
document.querySelector( 'div#outer' ).shadowRoot.querySelector( 'div#inner' )
Or the relative path: use getRootNode()
to get the Shadow DOM root
event.target.getRootNode().querySelector( 'div#inner' )
Example:
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>
Upvotes: 8