aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Zhuravlev <private.face@gmail.com>2012-06-15 21:37:01 -0400
committerDave Methvin <dave.methvin@gmail.com>2012-06-15 21:37:01 -0400
commit9c28a320c3fa6dcc06de4919d24da41451843570 (patch)
treeb8eb9e1c8d15a631e4fef983d793ef58d57d6d4e
parent0b352f6cb58a1ece3f5d1fb978cdb40bd5b0e854 (diff)
downloadjquery-9c28a320c3fa6dcc06de4919d24da41451843570.tar.gz
jquery-9c28a320c3fa6dcc06de4919d24da41451843570.zip
Fix #11566, allow appending to DocumentFragment, closes gh-814.
-rw-r--r--src/manipulation.js4
-rw-r--r--test/unit/manipulation.js104
2 files changed, 71 insertions, 37 deletions
diff --git a/src/manipulation.js b/src/manipulation.js
index ca5ccf412..a7751ac82 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -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 );
}
});
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 13c653533..3c3542ef2 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -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' />"));
@@ -340,10 +389,6 @@ var testAppend = function(valueObj) {
}).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 {
var body = jQuery("#iframe")[0].contentWindow.document.body;
@@ -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() {