Here you go: http://dev.jquery.com/ticket/4004
Jed On Jan 27, 6:27 am, Brandon Aaron <[email protected]> wrote: > This sounds reasonable. Can you make an enhancement ticket so it doesn't get > lost on the list? > -- > Brandon Aaron > > On Tue, Jan 27, 2009 at 2:02 AM, Jed Schmidt <[email protected]> wrote: > > > John, > > > Thinking about it again, would it make sense to decouple DOM removal > > from element death? This could help you speed up not only > > $.fn.replaceWith, but also $.fn.empty and everything that uses it > > (including $.fn.html and $.fn.text), with something like this: > > > function kill() { > > jQuery.event.remove( this ); > > jQuery.removeData( this ); > > }; > > > jQuery.each({ > > remove: function( selector ) { > > if ( !selector || jQuery.filter( selector, [ this ] ).length ) { > > jQuery( "*", this ).add([this]).each( kill ); > > if (this.parentNode) > > this.parentNode.removeChild( this ); > > } > > }, > > > empty: function() { > > jQuery( ">*", this ).each( kill ); > > this.innerHTML = ""; // or whatever is fastest > > } > > }, function(name, fn){ > > jQuery.fn[ name ] = function(){ > > return this.each( fn, arguments ); > > }; > > }); > > > $.fn.extend({ > > replaceWith: function() { > > this.find( "*" ).add([this]).each( kill ); > > return this.domManip(arguments, false, function(elem){ > > this.parentNode.replaceChild( elem, this ); > > }) > > } > > }); > > > Jed > > > On Jan 19, 5:09 pm, Jed Schmidt <[email protected]> wrote: > > > Ah, I suspected there might be something like that. > > > > 1.3 is great, keep up the good work! > > > > Jed > > > > On Jan 19, 5:02 pm, John Resig <[email protected]> wrote: > > > > > I like it - but the one tricky part is that .remove() is actually > > > > functional beyond the simple .removeChild() call - it also removes any > > > > bound event handlers and bound data from the elements (which is > > > > something that this modified replaceWith would not do). That > > > > functionality would need to stay intact (this is the same reason why > > > > we do .empty().append() in .html() instead of using a straight > > > > innerHTML). > > > > > --John > > > > > On Mon, Jan 19, 2009 at 7:49 PM, Jed Schmidt <[email protected]> wrote: > > > > > > Hey all, > > > > > > Looking at the new source code for 1.3, I was wondering why jQuery > > > > > doesn't take advantage of the native replaceChild method in the W3C > > > > > core. Currently, jQuery implements replaceWith using append and > > > > > remove, but since replaceChild is well supported[1] across browsers, > > > > > it seems like a safe place to optimize performance, since it reduces > > > > > two in-place DOM operations with one. > > > > > > So I replaced this on line 487 in 1.3: > > > > > > replaceWith: function( value ) { > > > > > return this.after( value ).remove(); > > > > > }, > > > > > > with this: > > > > > > replaceWith: function() { > > > > > return this.domManip(arguments, false, function(elem){ > > > > > this.parentNode.replaceChild( elem, this ); > > > > > }); > > > > > }, > > > > > > and put together a before[2] and after[3] page. > > > > > > On OS 10.5.6, Firefox 3.0.5 went from an average of 1239ms to 935ms, > > > > > and Safari 3.2.1 went from an average of 421ms to 331ms. > > > > > > What do you guys think? > > > > > > Jed Schmidt > > > > > > [1]http://www.quirksmode.org/dom/w3c_core.html > > > > > [2]http://s3.amazonaws.com/replacewith/before.html > > > > > [3]http://s3.amazonaws.com/replacewith/after.html > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---
