On 24/11/11 10:52 AM, Yehuda Katz wrote:
Yehuda Katz
(ph) 718.877.1325
On Wed, Nov 23, 2011 at 2:38 PM, Sean Hogan <[email protected]
<mailto:[email protected]>> wrote:
On 23/11/11 12:17 AM, Boris Zbarsky wrote:
On 11/22/11 6:50 AM, Lachlan Hunt wrote:
Last time we had this discussion, you had a desire to keep
the name
prefixed until the refNodes and :scope stuff was
implemented [1]. What's
the status on that now?
The status is that I've given up on the :scope discussion
reaching a conclusion in finite time (esp. because it sounds
like people would like to change what it means depending on
the name of the function being called) and would be quite
happy to ship an implementation that only takes one argument.
Web pages can use .length on the function to detect support
for the two-argument version if that ever happens.
Are there any issues with:
- If you want to use selectors with explicit :scope then you use
querySelector / querySelectorAll / matchesSelector.
- If you want to use selectors with :scope implied at the start of
each selector in the selector list (as most js libs currently do)
then you use find / findAll / matches.
The alternative option (find / findAll / matches can accept
explicit :scope, but will otherwise imply :scope) seems to be
where all the ambiguity lies.
What exact cases are ambiguous with "find/findAll/matches can accept
explicit :scope, but will otherwise imply :scope"?
This has been raised before, but I'll restate it here.
How should the selector be expanded in
elt.findAll("div span, div :scope span")?
The straight-forward interpretation of "implies :scope unless it is
explicit" is to not expand this, thus:
"div span, div :scope span"
But with that interpretation
elt.findAll("> div span, div :scope span")
will throw an error, although
elt.findAll("> div span"); elt.findAll("div :scope span");
is allowed.
If this isn't to throw an error then a more complex definition is
required which can apply a different rule for implying :scope in
different parts of the selector argument. This is sure to be confusing
for anyone reading the code.
OTOH, if find / findAll always implies :scope there isn't this problem.
Moreover, that is what people will expect if they are used to jQuery's
find() and equivalents in other JS libs.
This makes for a fairly straight-forward explanation of usage:
- If you want to use selectors with explicit :scope then you use
querySelector / querySelectorAll / matchesSelector.
- If you want to use selectors with :scope implied at the start of each
selector in the selector list (as most js libs currently do) then you
use find / findAll / matches.