Skip to content
Permalink
Browse files

Fix #11566, allow appending to DocumentFragment, closes gh-814.

  • Loading branch information...
private-face authored and dmethvin committed Jun 16, 2012
1 parent 0b352f6 commit 9c28a320c3fa6dcc06de4919d24da41451843570
Showing with 71 additions and 37 deletions.
  1. +2 −2 src/manipulation.js
  2. +69 −35 test/unit/manipulation.js
@@ -127,15 +127,15 @@ 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 );
}
});
},

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 );
}
});
@@ -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() {

0 comments on commit 9c28a32

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.