I did some performance testing with the following code, and found it
to be much slower than the cloneNode method, but still often twice as
fast as the current method.

jQuery.fn.removeAll = function() {
        this.each(function() {
                var nextSibling = this.nextSibling;
                var parent = this.parentNode;

                parent.removeChild(this);
                while (this.firstChild) {
                        this.removeChild(this.firstChild);
                }
                if(nextSibling)
                        parent.insertBefore(this, nextSibling)
                else
                        parent.appendChild(this);
        });
};

What are the problems with the cloneNode method?

Devon

On Dec 13, 5:36 pm, Devon Govett <devongov...@gmail.com> wrote:
> Yeah I tried that too, and it was slightly slower in most browsers
> than cloneNode.  The other issue with this, is that if the user has a
> slow computer, or the removal is taking a really long time, layout
> problems may occur since there is no element in the DOM during the
> emptying.  The cloneNode method has the advantage that during the
> emptying process nothing is removed from the screen and so things
> don't look weird.  I know this is an edge case, but it is something to
> consider.
>
> Devon
>
> On Dec 13, 10:46 am, John Resig <jere...@gmail.com> wrote:
>
>
>
> > Actually, now that you bring this up, it would make a lot of sense to
> > just remove the element from the DOM first and /then/ go through and
> > clean up the child nodes, and finally re-inject the element again. I'm
> > hesitant to do a cloneNode because of the inherent problems that exist
> > in Internet Explorer. I'll see if I have some time to do some perf
> > testing on this later today.
>
> > --John
>
> > On Sun, Dec 13, 2009 at 8:19 AM, Devon Govett <devongov...@gmail.com> wrote:
> > > Hi all,
>
> > > I've just blogged about a technique that I used to make jQuery.empty
> > > over 10x faster in some cases.  Basically, rather than individually
> > > removing each child element from the DOM which causes the browser to
> > > reflow after each one, I use a shallow cloneNode to do the job then
> > > copying events back over.  Check out the blog post for more details:
> > >http://devongovett.wordpress.com/2009/12/12/how-to-make-jquery-empty-....
> > > I've included some charts comparing the performance of jQuery 1.4's
> > > empty and html("") functions, as well as the function I've written,
> > > and the cloneNode method out performs all other methods by a
> > > significant amount in all browsers.
>
> > > Thanks for jQuery!
> > > Devon
>
> > > --
>
> > > You received this message because you are subscribed to the Google Groups 
> > > "jQuery Development" group.
> > > To post to this group, send email to jquery-...@googlegroups.com.
> > > To unsubscribe from this group, send email to 
> > > jquery-dev+unsubscr...@googlegroups.com.
> > > For more options, visit this group 
> > > athttp://groups.google.com/group/jquery-dev?hl=en.

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@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