From ccf055033ab165c677590b42fa0ca7e0a29e9fb7 Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Sat, 8 Dec 2007 23:03:10 +0000 Subject: [PATCH] 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. --- src/core.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/core.js b/src/core.js index 313cdfa..27a5728 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 -- 1.7.10.4