- From: Lachlan Hunt <lachlan.hunt@lachy.id.au>
- Date: Wed, 19 Oct 2011 20:01:30 +0200
- To: Alex Russell <slightlyoff@google.com>
- CC: Webapps WG <public-webapps@w3.org>, Yehuda Katz <wycats@gmail.com>, John Resig <jeresig@gmail.com>, Paul Irish <paulirish@google.com>
On 2011-10-19 16:08, Alex Russell wrote:
> On Wed, Oct 19, 2011 at 1:54 PM, Lachlan Hunt<lachlan.hunt@lachy.id.au> wrote:
>> I have attempted to address this problem before and the algorithm for
>> parsing a *scoped selector string* (basically what you're calling a
>> rootedSelector) existed in an old draft [1].
>>
>> That draft also allowed the flexibility of including an explicit :scope
>> pseudo-class in the selector, which allows for conditional expressions to be
>> built into the selector itself that can be used to check the state of the
>> scope element or any of its ancestors.
>
> We could accomodate that by looking at the passed selector and trying
> to determine if it includes a ":scope" term. If so, avoid prefixing.
Yes, that's exactly what the draft specified.
> That'd allow this sort of flexibility for folks who want to write
> things out long-hand or target the scope root in the selector,
> possibly returning itself.
I don't see a use case for wanting the proposed method to be able to
return the element itself. The case where it's useful for elements
matching :scope to be the subject of a selector is where you're trying
to filter a list of elements.
e.g.
document.querySelectorAll(".foo:scope", list);
// Returns all elements from list that match.
But this wouldn't make sense
el.find(".foo:scope") // Return itself if it matches.
That result seems effectively like a less efficient boolean check that
is already handled by el.matchesSelector(".foo").
> I''d also support a resolution for this sort of power-tool that
> forces people to use document.qsa("...",scopeEl) to get at that sort
> of thing.
If there was no special handling to check for an explicit :scope, that
would mean that any selector that does include :scope explicitly would
not match anything at all.
e.g. el.findAll(":scope>p");
That would be equivalent to:
document.querySelectorAll(":scope :scope>p", el);
Which won't match anything.
That might keep things simpler from an implementation perspective and
doesn't sacrifice any functionality being requested.
--
Lachlan Hunt - Opera Software
http://lachy.id.au/
http://www.opera.com/
Received on Wednesday, 19 October 2011 18:02:13 UTC