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.
This commit is contained in:
parent
b3ec8edddd
commit
ccf055033a
1 changed files with 17 additions and 3 deletions
20
src/core.js
20
src/core.js
|
@ -292,9 +292,23 @@ jQuery.fn = jQuery.prototype = {
|
||||||
clone: function( events ) {
|
clone: function( events ) {
|
||||||
// Do the clone
|
// Do the clone
|
||||||
var ret = this.map(function(){
|
var ret = this.map(function(){
|
||||||
return this.outerHTML ?
|
if ( jQuery.browser.msie ) {
|
||||||
jQuery( this.outerHTML )[0] :
|
// IE copies events bound via attachEvent when
|
||||||
this.cloneNode( true );
|
// 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
|
// Need to set the expando to null on the cloned set if it exists
|
||||||
|
|
Loading…
Add table
Reference in a new issue