- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Thu, 24 Jul 2008 10:25:36 -0700
- To: Francois Remy <fremycompany_pub@yahoo.fr>
- CC: www-style list <www-style@w3.org>
Francois Remy wrote:
> But it's not possible to know when an element changes in JScript...
Not strictly true, as long as you trust mousein/out and mutation events.
But that's not important.
> imagine this case :
...
> and this rule :
>
> div#base div.el1:with-child(a:hover b) span:hover { color: green; }
> The rule need to be reevaluated each time :
> - (1) The elements matched by "div" change (any DIV can get or loose
> id="base")
How do you (or rather the implementation) know you only need to worry
about changes to <div> elements?
> - (2) The elements matched by "div#base div" change (any DIV of
> div#base can get or loose class="el1")
> - (3) The elements matched by "div#base div.el1 span" change (any
> SPAN can get or loose :hover)
You missed several cases along the lines of:
(4) Any subtree that might contain a <b> element is inserted anywhere in
the document.
(5) Any subtree that might contain a <b> element is removed anywhere in
the document.
These are what make life hard with this sort of selector.
> The with-child rule need to be reevaluated each time :
> - (4) The first element matched by "div#base div.el1 a:hover b" change
> - (5) The first ancestror of the "b" that matches "a:hover" change
You missed some cases. See above.
> At loading time :
Again, the worry is less loading time than dynamic DOM updates. But
even for loading time...
> For each div1 matched by document.getElementsByTagName("div")
This happens every time content is incrementally added to the document,
right? Since this operation is O(n), that makes pageload O(n*n) at best
with your algorithm.
-Boris
Received on Thursday, 24 July 2008 17:26:27 UTC