]> source.dussan.org Git - jquery.git/commitdiff
Manipulation: make wrapAll funarg execute only once
authorOleg Gaidarenko <markelog@gmail.com>
Tue, 23 Dec 2014 22:56:21 +0000 (01:56 +0300)
committerOleg Gaidarenko <markelog@gmail.com>
Tue, 23 Dec 2014 22:58:39 +0000 (01:58 +0300)
Ref 359b03cac74d7336676a6992f14b7ccab9b28659

src/wrap.js
test/unit/wrap.js

index 93c7b2cfdf68a2b1942aa4c7633ad6bc5484311f..053b9b5b91d3d1361b009ed9818a21ec01e1a4c9 100644 (file)
@@ -7,18 +7,18 @@ define([
 
 jQuery.fn.extend({
        wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
 
-               if ( this[0] ) {
                        // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
 
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
                        }
 
                        wrap.map(function() {
index 114e9faf8c3aad8072a0b83a8ad1c1818ba90ffd..ffc5a92e73687af52c9cf2b1f8f5460380d7b623 100644 (file)
@@ -149,6 +149,66 @@ test( "wrapAll(String)", function() {
 
 });
 
+test( "wrapAll(Function)", 5, function() {
+       var prev = jQuery( "#firstp" )[ 0 ].previousSibling,
+               p = jQuery( "#firstp,#first" )[ 0 ].parentNode,
+               result = jQuery( "#firstp,#first" ).wrapAll(function() {
+                       return "<div class='red'><div class='tmp'></div></div>";
+               });
+
+       equal( result.parent().length, 1, "Check for wrapping of on-the-fly html" );
+       ok( jQuery( "#first" ).parent().parent().is( ".red" ), "Check if wrapper has class 'red'" );
+       ok( jQuery( "#firstp" ).parent().parent().is( ".red" ), "Check if wrapper has class 'red'" );
+       ok( jQuery( "#first" ).parent().parent().parent().is( p ), "Correct Parent" );
+       strictEqual( jQuery( "#first" ).parent().parent()[ 0 ].previousSibling, prev, "Correct Previous Sibling" );
+});
+
+test( "wrapAll(Function) check execution characteristics", 3, function() {
+       var i = 0;
+
+       jQuery( "non-existent" ).wrapAll(function() {
+               i++;
+               return "";
+       });
+
+       ok( !i, "should not execute function argument if target element does not exist" );
+
+       jQuery( "#firstp" ).wrapAll(function( index ) {
+               strictEqual( this, jQuery( "#firstp" )[ 0 ], "context must be the first found element" );
+               strictEqual( index, undefined, "index argument should not be included in function execution" );
+       });
+});
+
+test( "wrapAll(Function)", 5, function() {
+       var prev = jQuery( "#firstp" )[ 0 ].previousSibling,
+               p = jQuery( "#firstp,#first" )[ 0 ].parentNode,
+               result = jQuery( "#firstp,#first" ).wrapAll(function() {
+                       return "<div class='red'><div class='tmp'></div></div>";
+               });
+
+       equal( result.parent().length, 1, "Check for wrapping of on-the-fly html" );
+       ok( jQuery( "#first" ).parent().parent().is( ".red" ), "Check if wrapper has class 'red'" );
+       ok( jQuery( "#firstp" ).parent().parent().is( ".red" ), "Check if wrapper has class 'red'" );
+       ok( jQuery( "#first" ).parent().parent().parent().is( p ), "Correct Parent" );
+       strictEqual( jQuery( "#first" ).parent().parent()[ 0 ].previousSibling, prev, "Correct Previous Sibling" );
+});
+
+test( "wrapAll(Function) check execution characteristics", 3, function() {
+       var i = 0;
+
+       jQuery( "non-existent" ).wrapAll(function() {
+               i++;
+               return "";
+       });
+
+       ok( !i, "should not execute function argument if target element does not exist" );
+
+       jQuery( "#firstp" ).wrapAll(function( index ) {
+               strictEqual( this, jQuery( "#firstp" )[ 0 ], "context must be the first found element" );
+               strictEqual( index, undefined, "index argument should not be included in function execution" );
+       });
+});
+
 test( "wrapAll(Element)", function() {
 
        expect( 3 );