Make sure that wrapInner works on elements that have no contents. Fixes #3552.
authorjeresig <jeresig@gmail.com>
Mon, 11 Jan 2010 21:31:31 +0000 (16:31 -0500)
committerjeresig <jeresig@gmail.com>
Mon, 11 Jan 2010 21:31:31 +0000 (16:31 -0500)
src/manipulation.js
test/unit/manipulation.js

index 3db2c35..742ec25 100644 (file)
@@ -77,7 +77,14 @@ jQuery.fn.extend({
 
        wrapInner: function( html ) {
                return this.each(function() {
-                       jQuery( this ).contents().wrapAll( html );
+                       var self = jQuery( this ), contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
                });
        },
 
index 3eef122..a0239a4 100644 (file)
@@ -145,7 +145,7 @@ test("wrapAll(String|Element)", function() {
 // })
 
 var testWrapInner = function(val) {
-       expect(6);
+       expect(8);
        var num = jQuery("#first").children().length;
        var result = jQuery('#first').wrapInner('<div class="red"><div id="tmp"></div></div>');
        equals( jQuery("#first").children().length, 1, "Only one child" );
@@ -158,6 +158,11 @@ var testWrapInner = function(val) {
        equals( jQuery("#first").children().length, 1, "Only one child" );
        ok( jQuery("#first").children().is("#empty"), "Verify Right Element" );
        equals( jQuery("#first").children().children().length, num, "Verify Elements Intact" );
+
+       var div = jQuery("<div/>");
+       div.wrapInner("<span></span>");
+       equals(div.children().length, 1, "The contents were wrapped.");
+       equals(div.children()[0].nodeName.toLowerCase(), "span", "A span was inserted.");
 }
 
 test("wrapInner(String|Element)", function() {