X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fmanipulation.js;h=01c6b0ba70a0b6df1d68aab44230a73c4c5ee977;hb=0db207da238e879dad20f68178e6248750d3b984;hp=4d0ffd0571b733de3df42a29aaedc175c790a8e9;hpb=bed759c95ca6d796125653b540e8611dc63b38bb;p=jquery.git diff --git a/src/manipulation.js b/src/manipulation.js index 4d0ffd0..01c6b0b 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -77,6 +77,12 @@ jQuery.fn.extend({ }, wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + return this.each(function() { var self = jQuery( this ), contents = self.contents(); @@ -142,6 +148,40 @@ jQuery.fn.extend({ return set; } }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, clone: function( events ) { // Do the clone @@ -227,6 +267,12 @@ jQuery.fn.extend({ // this can help fix replacing a parent with child elements if ( !jQuery.isFunction( value ) ) { value = jQuery( value ).detach(); + + } else { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); } return this.each(function() { @@ -369,45 +415,20 @@ jQuery.each({ }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var ret = [], insert = jQuery( selector ); - - for ( var i = 0, l = insert.length; i < l; i++ ) { - var elems = (i > 0 ? this.clone(true) : this).get(); - jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); - ret = ret.concat( elems ); - } - return this.pushStack( ret, name, insert.selector ); - }; -}); - -jQuery.each({ - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - if ( !selector || jQuery.filter( selector, [ this ] ).length ) { - if ( !keepData && this.nodeType === 1 ) { - jQuery.cleanData( this.getElementsByTagName("*") ); - jQuery.cleanData( [ this ] ); - } - - if ( this.parentNode ) { - this.parentNode.removeChild( this ); + + if ( this.length === 1 && this[0].parentNode && this[0].parentNode.nodeType === 11 && insert.length === 1 ) { + insert[ original ]( this[0] ); + return this; + + } else { + for ( var i = 0, l = insert.length; i < l; i++ ) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); + ret = ret.concat( elems ); } + + return this.pushStack( ret, name, insert.selector ); } - }, - - empty: function() { - // Remove element nodes and prevent memory leaks - if ( this.nodeType === 1 ) { - jQuery.cleanData( this.getElementsByTagName("*") ); - } - - // Remove any remaining nodes - while ( this.firstChild ) { - this.removeChild( this.firstChild ); - } - } -}, function( name, fn ) { - jQuery.fn[ name ] = function() { - return this.each( fn, arguments ); }; }); @@ -422,13 +443,13 @@ jQuery.extend({ var ret = []; - jQuery.each(elems, function( i, elem ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { if ( typeof elem === "number" ) { elem += ""; } if ( !elem ) { - return; + continue; } // Convert html string into DOM nodes @@ -479,7 +500,7 @@ jQuery.extend({ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); } - elem = jQuery.makeArray( div.childNodes ); + elem = div.childNodes; } if ( elem.nodeType ) { @@ -487,13 +508,13 @@ jQuery.extend({ } else { ret = jQuery.merge( ret, elem ); } - - }); + } if ( fragment ) { for ( var i = 0; ret[i]; i++ ) { if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); + } else { if ( ret[i].nodeType === 1 ) { ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); @@ -507,9 +528,24 @@ jQuery.extend({ }, cleanData: function( elems ) { - for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) { - jQuery.event.remove( elem ); - jQuery.removeData( elem ); + var data, id, cache = jQuery.cache; + + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + id = elem[ jQuery.expando ]; + + if ( id ) { + data = cache[ id ]; + + if ( data.events ) { + for ( var event in data.events ) { + removeEvent( elem, event, data.handle ); + } + } + + removeExpando( elem ); + + delete cache[ id ]; + } } } });