X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fmanipulation.js;h=1ef19f83b54ee56b2d7a2c2baf141b1e8c7dd0e1;hb=375b78783825b9adab7a01541faf99f98ef7ecbd;hp=d758d803ff2834aba2743a9f6f5fdacf7416b777;hpb=6458885881e7badb99c70c24843c31d13064a167;p=jquery.git diff --git a/src/manipulation.js b/src/manipulation.js index d758d80..1ef19f8 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -184,9 +184,9 @@ jQuery.fn.extend({ }, clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? true : dataAndEvents; + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - + return this.map( function () { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); @@ -311,12 +311,19 @@ jQuery.fn.extend({ if ( first ) { table = table && jQuery.nodeName( first, "tr" ); - for ( var i = 0, l = this.length; i < l; i++ ) { + for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) { callback.call( table ? root(this[i], first) : this[i], - i > 0 || results.cacheable || (this.length > 1 && i > 0) ? + // Make sure that we do not leak memory by inadvertently discarding + // the original fragment (which might have attached data) instead of + // using it; in addition, use the original fragment object for the last + // item instead of first because it can end up being emptied incorrectly + // in certain situations (Bug #8070). + // Fragments from the fragment cache must always be cloned and never used + // in place. + results.cacheable || (l > 1 && i < lastIndex) ? jQuery.clone( fragment, true, true ) : fragment ); @@ -484,9 +491,10 @@ jQuery.each({ jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var clone = elem.cloneNode(true), - srcElements, - destElements; + var clone = elem.cloneNode(true), + srcElements, + destElements, + i; if ( !jQuery.support.noCloneEvent && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { // IE copies events bound via attachEvent when using cloneNode. @@ -503,7 +511,7 @@ jQuery.extend({ // Weird iteration because IE will replace the length property // with an element if you are cloning the body and one of the // elements on the page has a name or id of "length" - for ( var i = 0; srcElements[i]; ++i ) { + for ( i = 0; srcElements[i]; ++i ) { cloneFixAttributes( srcElements[i], destElements[i] ); } @@ -521,7 +529,7 @@ jQuery.extend({ destElements = clone.getElementsByTagName("*"); if ( srcElements.length ) { - for ( var i = 0; srcElements[i]; ++i ) { + for ( i = 0; srcElements[i]; ++i ) { cloneCopyEvent( srcElements[i], destElements[i] ); } }