Make sure that we don't try to use a detached node (that was in a fragment) as a...
authorjeresig <jeresig@gmail.com>
Sat, 13 Feb 2010 08:14:00 +0000 (03:14 -0500)
committerjeresig <jeresig@gmail.com>
Sat, 13 Feb 2010 08:14:00 +0000 (03:14 -0500)
src/manipulation.js
src/support.js
test/unit/manipulation.js

index 1453f98..a10feae 100644 (file)
@@ -321,7 +321,7 @@ jQuery.fn.extend({
                        parent = value && value.parentNode;
 
                        // If we're in a fragment, just use that instead of building a new one
-                       if ( parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
                                results = { fragment: parent };
 
                        } else {
index befc532..c9ff58c 100644 (file)
@@ -56,6 +56,8 @@
                // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
                optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
 
+               parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
+
                // Will be defined later
                checkClone: false,
                scriptEval: false,
index 2492ca5..eafbf25 100644 (file)
@@ -376,7 +376,8 @@ test("append(Function) with incoming value", function() {
 });
 
 test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
-       expect(13);
+       expect(14);
+
        var defaultText = 'Try them out:'
        jQuery('<b>buga</b>').appendTo('#first');
        equals( jQuery("#first").text(), defaultText + 'buga', 'Check if text appending works' );
@@ -429,6 +430,15 @@ test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        jQuery("<span>a</span><b>b</b>").filter("span").appendTo( div );
 
        equals( div.children().length, 1, "Make sure the right number of children were inserted." );
+
+       div = jQuery("#moretests div");
+
+       var num = jQuery("#main div").length;
+       div.remove().appendTo("#main");
+
+       equals( jQuery("#main div").length, num, "Make sure all the removed divs were inserted." );
+
+       reset();
 });
 
 var testPrepend = function(val) {