On 11/01/10 4:19 PM, Boris Zbarsky wrote:
On 1/10/10 11:58 PM, Sean Hogan wrote:
Even if jQuery deprecates non-standard selectors, the current spec for
queryScopedSelector*() doesn't support the jQuery implicitly "scoped"
selector "> *".

As I understand it, jquery selectors on elements are always scoped in the sense that they behave differently from the v1 Selectors API. In particular, if I understand correctly, the behavior of:

  element.querySelector("body div")

in matching all <div>s that are descendants of |element| and also descendants of a <body> (which may be an _ancestor_ of |element|) is different from the selector behavior in jquery.

Or did I understand incorrectly?

That's correct. jQuery's $(element).find("div") is the equivalent of SelectorsAPI2's element.querySelectorAll(":scope div") or element.queryScopedSelectorAll("div").

My point is that jQuery's $(element).find("> div") isn't supported (without pre-processing by the JS lib) by element.queryScopedSelectorAll().


All that said, I just read the draft at http://dev.w3.org/2006/webapi/selectors-api2/ and I can't make heads or tails of either what the new arguments to querySelector(All) are supposed to mean (are they just an enumaration of the things :scope is allowed to match during the selector evaluation?) or what queryScopedSelector(All) is supposed to do. Am I just missing something? Am I reading the wrong draft?

(I'd link to the "dated" version of the draft, in case it changes, but that link is broken, sadly.)


You are correct about the new refNodes argument in querySelector*().
queryScopedSelector*() are more-or-less wrappers around querySelector*().

e.g.

element.queryScopedSelectorAll("div") generally becomes
element.parentNode.querySelectorAll(":scope div", element) which is the same as
element.querySelectorAll(":scope div", element) or even
element.querySelectorAll(":scope div")


element.queryScopedSelectorAll(":scope > div") generally becomes
element.parentNode.querySelectorAll(":scope > div", element) which is the same as
element.querySelectorAll(":scope > div", element) or even
element.querySelectorAll(":scope > div")


element.queryScopedSelectorAll(":scope + div") generally becomes
element.parentNode.querySelectorAll(":scope + div", element)


element.queryScopedSelectorAll("div, div:scope") generally becomes
element.parentNode.querySelectorAll(":scope div, div:scope", element)




Reply via email to