On 10/18/11 5:23 PM, Brian Kardell wrote:
This is not that easy.  Especially because you can reach all DOM objects
from elements, so you have to lock down the entire API somehow.

Right, you would need essentially, to pass in a node list which
iterated 'lite' read-only elements.

So the script would not get an actual DOM tree and not run in the Window scope? The objects would not have an ownerDocument? What other restrictions would they need to have?

Maybe I'm way off, but actually seems not that difficult to
imagine the implementation.

If we're willing to pass in some totally-not-DOM data structure and run in some sandbox scope, then sure.

div .x:foo(.bar) span

The normal CSS resolution would be to get the spans, narrow by .x's
then throw what you have so far to the filter, removing anything that
returned false and carrying on as normal.

Normal CSS selector examines the .x part for each span as it finds it. Otherwise selectors like "#foo > *" would require building up a list of all elements in the DOM, no?

The slowness as I see it would be that the filter would yes, call across the 
boundary and yes
have to build some intermediate and evaluating anything too complex in
the filter in that would be very slow by comparison probably - but you
don't have to do "much" to be useful...  Is there something in that
pattern that I am missing in terms of  what you are saying about
identifying what has changed out from underneath you?

_If_ the filter runs JS that can touch the DOM, then in your example for every span you find you'd end up calling into the filter, and then you have to worry about the filter rearranging the DOM under you.

As far as I can see it doesn't invalidate anything that already exists in 
CSS/selector
implementations in terms of indexes or anything

At least the querySelectorAll implementations I have looked at (WebKit and Gecko) traverse the DOM and for each element they find check whether it matches the selector. If so, they add it to the result set. Furthermore, selector matching itself has to walk over the tree in various ways (e.g. to handle combinators). Both operations right now assume that the tree does NOT mutate while this is happening.

-Boris


Reply via email to