- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Thu, 21 Jan 2010 10:33:02 -0600
- To: Bert Bos <bert@w3.org>
- Cc: public-webapps@w3.org, "www-style@w3.org" <www-style@w3.org>
On Thu, Jan 21, 2010 at 10:11 AM, Bert Bos <bert@w3.org> wrote: > 2) Drop queryScopedSelector() and queryScopedSelectorAll(). It is > trivially easy to replace a call to queryScopedSelector() by a call to > querySelector(). All you have to do is replace > > e.queryScopedSelector(x) > by > e.ownerDocument.querySelector(x) That's completely incorrect. A querySelector call on the document will return all elements that match the selector. A queryScopedSelector call on an element will only return elements that match the selector in the target element's subtree. > where e is an Element. And for documents d the functions are even > exactly the same: d.queryScopedSelector(x) == d.querySelector(x) for > all documents d and selectors x. That doesn't solve the problem, it just says "We don't need to solve this problem.". A scoped call on the document root is indeed the same as a non-scoped selector, but that doesn't tell us anything about the actual scoped behavior. It's a degenerate case. > Somebody somewhere else was wondering about the selector ':root + *'. I > would say it's a valid selector that just happens to never match > anything, because a tree by definition has only one root. The same > holds for selectors like '#foo #foo' (valid, but guaranteed to return > nothing, because IDs are by definition unique), '*:first-child:even' > (the first child is obviously odd, not even), and ':root:first-child' > (the root is not a child of anything). In a scoped selector, ":scope + *" *should* return something, if the scoping element has a sibling. It's the behavior of jQuery's find() method (try elem.find("+ *")), and it's what authors are used to. The entire *point* of scoped selectors was to fix the disconnect between querySelector and jQuery, basically. Adding yet another selector function that doesn't act like what current widely-adopted libraries need or what authors expect doesn't help anyone. I don't like the requirement of :scope either, but Lachy took Anne's dislike of starting the string with a bare combinator to be the WG's position as a whole. I think matching jQuery here is *very* important both for author expectations and for practical benefit, and so having e.queryScopedSelectorAll("+ *") do the exact same thing as $(e).find("+ *") is essential. ~TJ
Received on Thursday, 21 January 2010 16:34:19 UTC