W3C home > Mailing lists > Public > public-webapi@w3.org > March 2008

Re: [selectors-api] Why no querySelector(All) on DocumentFragments?

From: liorean <liorean@gmail.com>
Date: Wed, 12 Mar 2008 23:59:32 +0100
Message-ID: <cee13aa30803121559y14335ccdl7a73e53340ffd5cb@mail.gmail.com>
To: "Web APIs WG (public)" <public-webapi@w3.org>

On 12/03/2008, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> liorean wrote:
>  > In this traversal scheme, querying the selector is still done from the
>  > document node, just excluding all subtrees except for the subtree of
>  > the element we're querying on.
>  >
>  > Another alternative is of course to do the matching backwards,
>  > beginning with trying to match the last simple selector in the
>  > selectors on each of the elements of the subtree in question, then
>  > traversing the tree in upwards direction.
>
> Indeed.  I believe the backwards approach is what UAs actually do, and
>  what makes the most sense to do.  That is, the real question is whether
>  there is a subset of the maximal connected subtree containing the given
>  node (the one on which querySelector is being called) such that this
>  subset consists of nodes which match the various sequences of simple
>  selectors involved, and are positioned as required by the combinators,
>  with the element matching the rightmost sequence of simple selectors a
>  descendant of the given node.  If so, that element matches the selector.

Isn't this approach potentially much more resource intensive though?
Consider a selector like "body > div span". If we're doing this query
on an element with thousands of elements in it's subtree, of which
large numbers are spans, then we'd be repeating the match for the
second simple selector on a whole lot of elements multiple times, but
have to discard almost all of those matches because the parent element
doesn't match the first simple selector. Even though this could be
memoised so that the second selector only has to be match to any
single element once, it seems like doing it the other direction is
less likely to have pathological cases.

>  If Selectors does not define this sort of thing (and as I recall it
>  actually doesn't), then selectors api might need to.  It would make the
>  most sense to define this in Selectors, however.

The Selectors spec doesn't really deal with the DOM though. To me it
seems the Selectors API is more appropriate place to have a spec
relating to DOM relations.

Also, aren't selectors intentionally written so that they can be
applied either forwards or backwards depending on which context
they're used within? (i.e. forwards makes more sense for applying CSS
to a node tree, while backwards makes more sense for testing if a node
conforms to a selector or not .)
-- 
David "liorean" Andersson
Received on Wednesday, 12 March 2008 22:59:43 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 12 March 2008 22:59:45 GMT