An interesting proposition - although before making a change of this
magnitude it would be good to get some performance numbers outlined so that
we know how worthwhile it is.

--John


On Fri, Aug 14, 2009 at 8:33 PM, lrbabe <lrb...@gmail.com> wrote:

>
> Hi,
>
> The principle of .closest( selector ) is that it cycles through the
> ancestors of an event target until it finds an element corresponding
> to the event target, or hits the root.
> To check for an element matching the selectors it uses the .is
> ( selector ) function which collects all elements corresponding to the
> selector and cycles through them to find if "this" is any of those
> elements.
>
> If my memories about my algorithm lectures are correct, the complexity
> of this algorithm is O(n²). Only in the case of a selector of the form
> "#id" we have an O(n) complexity.
> However, there is another range of selectors that could be checked
> with an O(n) algorithm: selectors such as "div", ".class" and
> "div.class". In those cases, .is( selector ) is not needed because we
> can directly check the ancestor's nodeType and className.
>
> Reducing the complexity of the .closest() function is particularly
> important when using event delegation with the mouseover and mouseout
> events: those events fire really often as the user moves his/her
> mouse, and the function needs to be used twice: one to check the the
> target is in the selector, and one to check that the related target is
> in a different ancestor.
>
> I propose a new implementation of .closest() that is able to detect
> those selectors and use them to "fast-check" ancestors. The last
> parsed selector is cached to further improve the performances (I'm
> just not sure where to cache the parsed selector).
>
> The code is available as a gist: http://gist.github.com/168158
> and can be tested here: http://www.lrbabe.com/sdoms/closest/
>
> Together with the recent addition of the "context" parameter
> in .closest(), it makes one of the most efficient event delegation
> helper out there.
>
> Feedback would be much appreciated,
>
> Regards,
> lrbabe
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to