9

Given an element contained in a shadow root, how can I get to the element that hosts the said shadow root? Is there a single way to accomplish this regardless of where an element is in the tree (i.e. given a reference to either element2 or element3, get the reference to element1)?

element1 └ #shadow-root └ element2 └ element3 
1
  • 1
    Can you include html, and the javascript that you have tried at Question? Commented Dec 24, 2016 at 1:18

2 Answers 2

12

For Shadow DOM v1, you may use the getRootNode() method.

Then get the host attribute:

event.target.getRootNode().host 
Sign up to request clarification or add additional context in comments.

1 Comment

Perfect! I had a hunch it was a built-in; manually walking up the tree was much too cumbersome.
0

You can keep iterating parentNode until you get the shadow root, and then get host.

function getHostElement(el) { while (el.parentNode) el = el.parentNode; return getShadowRoot(el).host; } var element1 = document.createElement('element1'); var element2 = document.createElement('element2'); var element3 = document.createElement('element3'); element2.appendChild(element3); var shadowRoot = element1.createShadowRoot(); shadowRoot.appendChild(element2); getHostElement(element3); // element1 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.