wrap.js (1477B)
1 define( [ 2 "./core", 3 "./var/isFunction", 4 "./core/init", 5 "./manipulation", // clone 6 "./traversing" // parent, contents 7 ], function( jQuery, isFunction ) { 8 9 "use strict"; 10 11 jQuery.fn.extend( { 12 wrapAll: function( html ) { 13 var wrap; 14 15 if ( this[ 0 ] ) { 16 if ( isFunction( html ) ) { 17 html = html.call( this[ 0 ] ); 18 } 19 20 // The elements to wrap the target around 21 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 22 23 if ( this[ 0 ].parentNode ) { 24 wrap.insertBefore( this[ 0 ] ); 25 } 26 27 wrap.map( function() { 28 var elem = this; 29 30 while ( elem.firstElementChild ) { 31 elem = elem.firstElementChild; 32 } 33 34 return elem; 35 } ).append( this ); 36 } 37 38 return this; 39 }, 40 41 wrapInner: function( html ) { 42 if ( isFunction( html ) ) { 43 return this.each( function( i ) { 44 jQuery( this ).wrapInner( html.call( this, i ) ); 45 } ); 46 } 47 48 return this.each( function() { 49 var self = jQuery( this ), 50 contents = self.contents(); 51 52 if ( contents.length ) { 53 contents.wrapAll( html ); 54 55 } else { 56 self.append( html ); 57 } 58 } ); 59 }, 60 61 wrap: function( html ) { 62 var htmlIsFunction = isFunction( html ); 63 64 return this.each( function( i ) { 65 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 66 } ); 67 }, 68 69 unwrap: function( selector ) { 70 this.parent( selector ).not( "body" ).each( function() { 71 jQuery( this ).replaceWith( this.childNodes ); 72 } ); 73 return this; 74 } 75 } ); 76 77 return jQuery; 78 } );