- From: Sean Hogan <shogun70@westnet.com.au>
- Date: Wed, 19 Oct 2011 22:58:34 +1100
- To: Ojan Vafai <ojan@chromium.org>
- CC: Boris Zbarsky <bzbarsky@mit.edu>, public-webapps@w3.org
- Message-ID: <4E9EBB6A.8060607@westnet.com.au>
On 19/10/11 2:39 PM, Ojan Vafai wrote:
> Overall, I wholeheartedly support the proposal.
>
> I don't really see the benefit of allowing starting with a combinator.
> I think it's a rare case that you actually care about the scope
> element and in those cases, using :scope is fine. Instead of
> element.findAll("> div > .thinger"), you use element.findAll(":scope >
> div > .thinger"). That said, I don't object to considering the :scope
> implied if the selector starts with a combinator.
>
I can think of two reasons one might ponder allowing :scope to be explicit.
1. so that the selector string can be a valid CSS selector string.
(":scope>div>.thinger" instead of ">div>.thinger"). But if this is
important then :scope should always be explicit, in which case we can
just use querySelectorAll().
2. to allow break-out behavior. e.g.
div.findAll("body div span"); // finds nothing
div.findAll("body div:scope span"); // finds span's that are descendants
of div
In this scenario, the :scope pseudo allows ancestors of div to be
matched against. (No-one would use body in this context, but it is easy
to imagine them using a .class selector which matches an ancestor of div.)
But if you want break-out behavior you might not know which part of the
selector to put the :scope pseudo on. Could it be:
body div:scope span
body *:scope div span
body div *:scope span
So for break-out behavior just use querySelectorAll().
I'm pretty sure previous discussions (before this thread) have covered
this more thoroughly, and shown that it has to be all or nothing with
the :scope pseudo-attribute. That is, either
a) :scope MUST be explicit, in which case just use querySelectorAll()
b) :scope MUST be implied at the start of every selector chain.
Sean
Received on Wednesday, 19 October 2011 11:59:09 UTC