From: Brandon Aaron Date: Sat, 8 Dec 2007 23:03:10 +0000 (+0000) Subject: Fixed clone so that it now properly copies changes to the innerHTML in IE. Unfortuna... X-Git-Tag: 1.2.2b~29 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ccf055033ab165c677590b42fa0ca7e0a29e9fb7;p=jquery.git Fixed clone so that it now properly copies changes to the innerHTML in IE. Unfortunately, IE stores some modifications to some attributes only as a property and they are still not copied properly. This is documented in ticket #1836. --- diff --git a/src/core.js b/src/core.js index 313cdfa75..27a57283e 100644 --- a/src/core.js +++ b/src/core.js @@ -292,9 +292,23 @@ jQuery.fn = jQuery.prototype = { clone: function( events ) { // Do the clone var ret = this.map(function(){ - return this.outerHTML ? - jQuery( this.outerHTML )[0] : - this.cloneNode( true ); + if ( jQuery.browser.msie ) { + // IE copies events bound via attachEvent when + // using cloneNode. Calling detachEvent on the + // clone will also remove the events from the orignal + // In order to get around this, we use innerHTML. + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored + // as properties will not be copied (such as the + // the name attribute on an input). + var clone = this.cloneNode(true), + container = document.createElement("div"), + container2 = document.createElement("div"); + container.appendChild(clone); + container2.innerHTML = container.innerHTML; + return container2.firstChild; + } else + return this.cloneNode(true); }); // Need to set the expando to null on the cloned set if it exists