Fix #7717 and #7165. Thanks to dmethvin and iliakan for their help fixing these issues.
[jquery.git] / src / manipulation.js
index 24409d2..c23f62e 100644 (file)
@@ -373,12 +373,12 @@ function cloneCopyEvent(orig, ret) {
        var i = 0;
 
        ret.each(function() {
-               if ( this.nodeType !== 1 || this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+               if ( this.nodeType !== 1 || this.nodeName !== (orig[i] && orig[i].nodeName) || !jQuery.hasData(orig[i]) ) {
                        return;
                }
 
                var oldData = jQuery.data( orig[i++] ),
-                       curData = jQuery.data( this, oldData ),
+                       curData = jQuery.data( this, jQuery.extend(true, {}, oldData) ),
                        events = oldData && oldData.events;
 
                if ( events ) {
@@ -415,17 +415,15 @@ function cloneFixAttributes(src, dest) {
        // attribute) to identify the type of content to display
        if ( nodeName === "object" ) {
                dest.outerHTML = src.outerHTML;
-       }
 
-       // IE6-? fails to persist the checked state of a cloned checkbox
+       // IE6-8 fails to persist the checked state of a cloned checkbox
        // or radio button
-       else if ( nodeName === "input" && src.checked ) {
+       } else if ( nodeName === "input" && src.checked ) {
                dest.defaultChecked = dest.checked = src.checked;
-       }
 
-       // IE6-? fails to return the selected option to the default selected
+       // IE6-8 fails to return the selected option to the default selected
        // state when cloning options
-       else if ( nodeName === "option" ) {
+       } else if ( nodeName === "option" ) {
                dest.selected = src.defaultSelected;
        }