Made .clone(true) also copy over element data. Fixes #4191.
authorJohn Resig <jeresig@gmail.com>
Wed, 9 Dec 2009 21:28:58 +0000 (13:28 -0800)
committerJohn Resig <jeresig@gmail.com>
Wed, 9 Dec 2009 21:28:58 +0000 (13:28 -0800)
src/manipulation.js
test/unit/manipulation.js

index 0c2753e..930b3d9 100644 (file)
@@ -277,13 +277,7 @@ function cloneCopyEvent(orig, ret) {
                        return;
                }
 
-               var events = jQuery.data( orig[i], "events" );
-
-               for ( var type in events ) {
-                       for ( var handler in events[ type ] ) {
-                               jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
-                       }
-               }
+               jQuery.data( this, jQuery.data( orig[i++] ) );
        });
 }
 
index 4631ead..6de3e14 100644 (file)
@@ -549,7 +549,7 @@ test("replaceAll(String|Element|Array&lt;Element&gt;|jQuery)", function() {
 });
 
 test("clone()", function() {
-       expect(28);
+       expect(30);
        equals( 'This is a normal link: Yahoo', jQuery('#en').text(), 'Assert text for #en' );
        var clone = jQuery('#yahoo').clone();
        equals( 'Try them out:Yahoo', jQuery('#first').append(clone).text(), 'Check for clone' );
@@ -594,6 +594,11 @@ test("clone()", function() {
        div = div.clone(true);
        equals( div.length, 1, "One element cloned" );
        equals( div[0].nodeName.toUpperCase(), "DIV", "DIV element cloned" );
+
+       div = jQuery("<div/>").data({ a: true, b: true });
+       div = div.clone(true);
+       equals( div.data("a"), true, "Data cloned." );
+       equals( div.data("b"), true, "Data cloned." );
 });
 
 if (!isLocal) {