]> 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:39:44 +0000 (13:39 -0400)
Fixes gh-1744
Closes gh-2003
(cherry picked from commit 7b09235ceed57bbcc26fc2c76147eb4e95ebdb92)

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

index 053b9b5b91d3d1361b009ed9818a21ec01e1a4c9..acab1ae95e425ec74425d97653980b48c60af918 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 ffc5a92e73687af52c9cf2b1f8f5460380d7b623..97647f80943ec1cf60f6aa8d98ea3b71c245a9ea 100644 (file)
@@ -330,6 +330,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 );