Fix for #4011, crash when two text nodes are appended in IE.
authorDave Methvin <dave.methvin@gmail.com>
Sun, 6 Dec 2009 01:06:00 +0000 (09:06 +0800)
committerJohn Resig <jeresig@gmail.com>
Sun, 6 Dec 2009 02:31:57 +0000 (10:31 +0800)
src/manipulation.js
test/unit/manipulation.js

index 7128d11..7d7038e 100644 (file)
@@ -388,7 +388,7 @@ jQuery.extend({
                        context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
                }
 
-               var ret = [], div = context.createElement("div");
+               var ret = [];
 
                jQuery.each(elems, function(i, elem){
                        if ( typeof elem === "number" ) {
@@ -408,7 +408,8 @@ jQuery.extend({
                                // Trim whitespace, otherwise indexOf won't work as expected
                                var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
                                        wrap = wrapMap[ tag ] || wrapMap._default,
-                                       depth = wrap[0];
+                                       depth = wrap[0],
+                                       div = context.createElement("div");
 
                                // Go to html and back, then peel off extra wrappers
                                div.innerHTML = wrap[1] + elem + wrap[2];
index c8ea240..75a1baa 100644 (file)
@@ -151,7 +151,7 @@ test("unwrap()", function() {
 });
 
 var testAppend = function(valueObj) {
-       expect(21);
+       expect(22);
        var defaultText = 'Try them out:'
        var result = jQuery('#first').append(valueObj('<b>buga</b>'));
        equals( result.text(), defaultText + 'buga', 'Check if text appending works' );
@@ -224,6 +224,8 @@ var testAppend = function(valueObj) {
 
        t( "Append Select", "#appendSelect1, #appendSelect2", ["appendSelect1", "appendSelect2"] );
 
+       equals( "Two nodes", jQuery('<div />').append("Two", " nodes").text(), "Appending two text nodes (#4011)" );
+
        // using contents will get comments regular, text, and comment nodes
        var j = jQuery("#nonnodes").contents();
        var d = jQuery("<div/>").appendTo("#nonnodes").append(j);