]> source.dussan.org Git - jquery.git/commitdiff
Wrap: Support .unwrap( selector) for selective unwrapping
authorDave Methvin <dave.methvin@gmail.com>
Mon, 12 Jan 2015 03:17:41 +0000 (22:17 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Mon, 30 Mar 2015 17:38:40 +0000 (13:38 -0400)
Fixes gh-1744
Closes gh-2003

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

index ee02aca758d6c7ad21f7f22f338ab3f77e7f4690..0d9bf0f2ed646c1c2379afea502bcd6289e9a65a 100644 (file)
@@ -63,12 +63,11 @@ jQuery.fn.extend({
                });
        },
 
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each(function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               });
+               return this;
        }
 });
 
index 9e9de43fadfc5f5450cf087417d29f66c87686bc..dcec277d2ab6155ace74fc54301d0ca74f9524cc 100644 (file)
@@ -298,6 +298,31 @@ test( "unwrap()", function() {
        jQuery("body > span.unwrap").remove();
 });
 
+test( "unwrap( selector )", function() {
+
+       expect( 5 );
+
+       jQuery( "body" ).append( "  <div id='unwrap' style='display: none;'> <div id='unwrap1'> <span class='unwrap'>a</span> <span class='unwrap'>b</span> </div> <div id='unwrap2'> <span class='unwrap'>c</span> <span class='unwrap'>d</span> </div> </div>" );
+
+       // Shouldn't unwrap, no match
+       jQuery( "#unwrap1 span" ) .unwrap( "#unwrap2" );
+       equal( jQuery("#unwrap1").length, 1, "still wrapped" );
+
+        // Shouldn't unwrap, no match
+       jQuery( "#unwrap1 span" ) .unwrap( "span" );
+       equal( jQuery("#unwrap1").length, 1, "still wrapped" );
+
+       // Unwraps
+       jQuery( "#unwrap1 span" ) .unwrap( "#unwrap1" );
+       equal( jQuery("#unwrap1").length, 0, "unwrapped match" );
+
+       // Check return values
+       deepEqual( jQuery( "#unwrap2 span" ).get(), jQuery( "#unwrap2 span" ).unwrap( "quote" ).get(), "return on unmatched unwrap" );
+       deepEqual( jQuery( "#unwrap2 span" ).get(), jQuery( "#unwrap2 span" ).unwrap( "#unwrap2" ).get(), "return on matched unwrap" );
+
+       jQuery("body > span.unwrap").remove();
+});
+
 test( "jQuery(<tag>) & wrap[Inner/All]() handle unknown elems (#10667)", function() {
 
        expect( 2 );