- From: <bugzilla@jessica.w3.org>
- Date: Fri, 01 Mar 2013 21:53:50 +0000
- To: public-webapps-bugzilla@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=20260 --- Comment #5 from Dominic Cooney <dominicc@chromium.org> --- Defining olderShadowRoot on HTMLShadowElement is inconvenient for code that wants to walk the list of ShadowRoots. It is necessary to write something like: function forEachShadowRoot(host, f) { for (var s = host.shadowRoot; s; s = olderShadowRootOf(s)) { f(s); } } function olderShadowRootOf(s) { var shadowElements = s.querySelectorAll('shadow'); for (var i = 0; i < shadowElements.length; i++) { var shadowElement = shadowElements[i]; if (shadowElement.olderShadowRoot) { return shadowElement.olderShadowRoot; } } // There were no shadow elements, or they were all inert shadowElement = document.createElement('shadow'); s.appendChild(shadowElement); var result = shadowElement.olderShadowRoot; shadowElement.remove(); return result; } This seems excessively complicated for this use case; it would be better if olderShadowRoot was defined on ShadowRoot, then one could simply write the loop in a straightforward way: function forEachShadowRoot(host, f) { for (var s = host.shadowRoot; s; s = s.olderShadowRoot) { f(s); } } (In reply to comment #0) > It could be named olderShadowRoot but |shadowRoot| aligns ShadowAware > interface and better for iterating over for() loop. I agree that this simplifies loops. However it could be confusing if in future ShadowRoot could have a ShadowRoot, or if ShadowRoot became an element. So I think the name olderShadowRoot is better. -- You are receiving this mail because: You are the QA Contact for the bug.
Received on Friday, 1 March 2013 21:53:52 UTC