Skip to content
Permalink
Browse files

Landing the .clone() rewrite by Brandon (also includes the new event …

…cloning functionality .clone(true)).
  • Loading branch information
jeresig committed Sep 8, 2007
1 parent cc22c04 commit 2929f8aa67584fc5fab05bdfae8a5b06245cacc7
Showing with 14 additions and 33 deletions.
  1. +14 −33 src/core.js
@@ -228,44 +228,25 @@ jQuery.fn = jQuery.prototype = {
jQuery.unique( data ) : data );
},

clone: function() {
var $this = this.add(this.find("*"));
if (jQuery.browser.msie) {
// Need to remove events on the element and its descendants
$this.each(function() {
this._$events = {};
for (var type in this.$events)
this._$events[type] = jQuery.extend({},this.$events[type]);
}).unbind();
}

clone: function(events) {
// Do the clone
var r = this.pushStack( jQuery.map( this, function(a){
return a.cloneNode( true );
}) );

if (jQuery.browser.msie) {
$this.each(function() {
// Add the events back to the original and its descendants
var events = this._$events;
for (var type in events)
for (var handler in events[type])
jQuery.event.add(this, type, events[type][handler], events[type][handler].data);
this._$events = null;
var ret = this.map(function(){
return this.outerHTML ? jQuery(this.outerHTML)[0] : this.cloneNode(true);
});
if (events === true) {
var clone = ret.find("*").andSelf();

this.find("*").andSelf().each(function(i) {
var events = this.$events;
for ( var type in events )
for ( var handler in events[type] )
jQuery.event.add(clone[i], type, events[type][handler], events[type][handler].data);
});
}

// copy form values over
var inputs = r.add(r.find('*')).filter('select,input[@type=checkbox]');
$this.filter('select,input[@type=checkbox]').each(function(i) {
if (this.selectedIndex)
inputs[i].selectedIndex = this.selectedIndex;
if (this.checked)
inputs[i].checked = true;
});

// Return the cloned set
return r;
return ret;
},

filter: function(t) {

0 comments on commit 2929f8a

Please sign in to comment.
You can’t perform that action at this time.