wrap.js 1.5 KB

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