[proposal] Node.containingShadowRoot
I think this would be useful for authors that want to write Shadow-DOM aware code.
All browser engines have a way to get a hand to the subtree root and check if it's a shadow root in one way or another.
Gecko: https://searchfox.org/mozilla-central/rev/2e355fa82aaa87e8424a9927c8136be184eeb6c7/dom/base/nsINode.cpp#699
WebKit: https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/dom/Node.cpp?rev=+254087#L1127
Chromium: https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/dom/node.cc;l=1815;drc=95e78e2d51fce9616e316073be6b2b92189e21ee
How do folks feel about this? Maybe it should just be in Element and Text or something...
cc @whatwg/components
@emilio can you provide more details and use-cases for this? Just curious how is this different from accessing the root node? what should be the behavior when the element is disconnected, etc?
It would not different to accessing the root node, but it can be O(1) rather that going through all the parents.
I just got a case where I wanted to check the activeElement of the containing tree, so (element.containingShadowRoot || document).activeElement.
I guess getRootNode() would also work, kinda. You wouldn't have the "is a shadow root" check built-in but that seems acceptable.
If we wanted to we could add some kind of filtering to that method via a dictionary member, but not sure if it’s worth the trouble. Depends a bit on how often it comes up I suppose.