]> source.dussan.org Git - jquery.git/commitdiff
Fix #11566, allow appending to DocumentFragment, closes gh-814.
authorVladimir Zhuravlev <private.face@gmail.com>
Sat, 16 Jun 2012 01:37:01 +0000 (21:37 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Sat, 16 Jun 2012 01:37:01 +0000 (21:37 -0400)
src/manipulation.js
test/unit/manipulation.js

index ca5ccf412de43df3309bd8179a2de8e8944fd44e..a7751ac8240be9b91db4ccc51092efd8caa9c1d8 100644 (file)
@@ -127,7 +127,7 @@ jQuery.fn.extend({
 
        append: function() {
                return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
                                this.appendChild( elem );
                        }
                });
@@ -135,7 +135,7 @@ jQuery.fn.extend({
 
        prepend: function() {
                return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
                                this.insertBefore( elem, this.firstChild );
                        }
                });
index 13c653533e41bbdbc21e1e4a1486dd3c76104336..3c3542ef20875993f29d5f15082e30a4f63b3962 100644 (file)
@@ -280,40 +280,89 @@ test("unwrap()", function() {
        jQuery("body > span.unwrap").remove();
 });
 
-var testAppend = function(valueObj) {
-       expect(46);
-       var defaultText = "Try them out:"
-       var result = jQuery("#first").append(valueObj("<b>buga</b>"));
-       equal( result.text(), defaultText + "buga", "Check if text appending works" );
-       equal( jQuery("#select3").append(valueObj("<option value='appendTest'>Append Test</option>")).find("option:last-child").attr("value"), "appendTest", "Appending html options to select element");
+var getWrappedElement = function() {
+       return jQuery("#sap");
+};
 
-       QUnit.reset();
+var getWrappedDocumentFragment = function() {
+       var f = document.createDocumentFragment();
+
+       // copy contents of #sap into new fragment
+       var clone = jQuery("#sap")[0].cloneNode(true);
+       var childs = clone.childNodes;
+       while (clone.childNodes.length) {
+               f.appendChild(clone.childNodes[0]);
+       }
+
+       clone = null;
+       return jQuery(f); 
+};
+
+var testAppendForObject = function(valueObj, isFragment) {
        var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:";
-       jQuery("#sap").append(valueObj(document.getElementById("first")));
-       equal( jQuery("#sap").text(), expected, "Check for appending of element" );
+       var objType = " " + (isFragment ? "(DocumentFragment)" : "(Element)");
+       var getObj = isFragment ? getWrappedDocumentFragment : getWrappedElement;
+
+       var obj = getObj();
+       obj.append(valueObj(document.getElementById("first")));
+       equal( obj.text(), expected, "Check for appending of element" + objType);
 
        QUnit.reset();
        expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
-       jQuery("#sap").append(valueObj([document.getElementById("first"), document.getElementById("yahoo")]));
-       equal( jQuery("#sap").text(), expected, "Check for appending of array of elements" );
+       obj = getObj();
+       obj.append(valueObj([document.getElementById("first"), document.getElementById("yahoo")]));
+       equal( obj.text(), expected, "Check for appending of array of elements" + objType );
 
        QUnit.reset();
        expected = "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:";
-       jQuery("#sap").append(valueObj(jQuery("#yahoo, #first")));
-       equal( jQuery("#sap").text(), expected, "Check for appending of jQuery object" );
+       obj = getObj();
+       obj.append(valueObj(jQuery("#yahoo, #first")));
+       equal( obj.text(), expected, "Check for appending of jQuery object" + objType );
 
        QUnit.reset();
-       jQuery("#sap").append(valueObj( 5 ));
-       ok( jQuery("#sap")[0].innerHTML.match( /5$/ ), "Check for appending a number" );
+       obj = getObj();
+       obj.append(valueObj( 5 ));
+       ok( obj.text().match( /5$/ ), "Check for appending a number" + objType );
+
+       QUnit.reset();
+       obj = getObj();
+       obj.append(valueObj( " text with spaces " ));
+       ok( obj.text().match(/ text with spaces $/), "Check for appending text with spaces" + objType );
+
+       QUnit.reset();
+       obj = getObj();
+       ok( obj.append(valueObj( [] )), "Check for appending an empty array." + objType );
+       ok( obj.append(valueObj( "" )), "Check for appending an empty string." + objType );
+       ok( obj.append(valueObj( document.getElementsByTagName("foo") )), "Check for appending an empty nodelist." + objType );
+
+       QUnit.reset();
+       obj = getObj();
+       obj.append(valueObj( document.getElementById("form") ));
+       equal( obj.children("form").size(), 1, "Check for appending a form" + objType ); // Bug #910
 
        QUnit.reset();
-       jQuery("#sap").append(valueObj( " text with spaces " ));
-       ok( jQuery("#sap")[0].innerHTML.match(/ text with spaces $/), "Check for appending text with spaces" );
+       var obj = getObj();
+       var prev = obj.children().length;
 
+       obj.append(
+               "<span></span>",
+               "<span></span>",
+               "<span></span>"
+       );
+
+       equal( obj.children().length, prev + 3, "Make sure that multiple arguments works." + objType );
        QUnit.reset();
-       ok( jQuery("#sap").append(valueObj( [] )), "Check for appending an empty array." );
-       ok( jQuery("#sap").append(valueObj( "" )), "Check for appending an empty string." );
-       ok( jQuery("#sap").append(valueObj( document.getElementsByTagName("foo") )), "Check for appending an empty nodelist." );
+}
+
+var testAppend = function(valueObj) {
+       expect(56);
+       testAppendForObject(valueObj, false);
+       testAppendForObject(valueObj, true);
+
+       var defaultText = "Try them out:"
+       var result = jQuery("#first").append(valueObj("<b>buga</b>"));
+       equal( result.text(), defaultText + "buga", "Check if text appending works" );
+       equal( jQuery("#select3").append(valueObj("<option value='appendTest'>Append Test</option>")).find("option:last-child").attr("value"), "appendTest", "Appending html options to select element");
 
        QUnit.reset();
        jQuery("form").append(valueObj("<input name='radiotest' type='radio' checked='checked' />"));
@@ -339,10 +388,6 @@ var testAppend = function(valueObj) {
                ok( jQuery(this).is(":checked"), "Append with name attribute after checked attribute");
        }).remove();
 
-       QUnit.reset();
-       jQuery("#sap").append(valueObj( document.getElementById("form") ));
-       equal( jQuery("#sap>form").size(), 1, "Check for appending a form" ); // Bug #910
-
        QUnit.reset();
        var pass = true;
        try {
@@ -404,17 +449,6 @@ var testAppend = function(valueObj) {
        equal( $radio[0].checked, true, "Reappending radios uphold which radio is checked" );
        equal( $radioNot[0].checked, false, "Reappending radios uphold not being checked" );
        QUnit.reset();
-
-       var prev = jQuery("#sap").children().length;
-
-       jQuery("#sap").append(
-               "<span></span>",
-               "<span></span>",
-               "<span></span>"
-       );
-
-       equal( jQuery("#sap").children().length, prev + 3, "Make sure that multiple arguments works." );
-       QUnit.reset();
 }
 
 test("append(String|Element|Array&lt;Element&gt;|jQuery)", function() {