]> source.dussan.org Git - jquery.git/commitdiff
Ref gh-1117: Don't stop on a falsy value in buildFragment.
authorOleg <markelog@gmail.com>
Wed, 9 Jan 2013 09:23:34 +0000 (13:23 +0400)
committerRichard Gibson <richard.gibson@gmail.com>
Wed, 9 Jan 2013 16:22:44 +0000 (11:22 -0500)
(cherry picked from commit 8e6c1ba92faf830d40cafe7a4deb4ad5ab9045fe)

src/manipulation.js
test/unit/manipulation.js

index 416e4c3d6430aa9df247d9a130251569a111273d..ce05fd63c4b283aac228a669f6ddfcb590d4d997 100644 (file)
@@ -619,8 +619,10 @@ jQuery.extend({
        },
 
        buildFragment: function( elems, context, scripts, selection ) {
-               var elem, i, j, tmp, tag, wrap, tbody,
-                       ret = [],
+               var elem, j, tmp, tag, wrap, tbody,
+                       nodes = [],
+                       i = 0,
+                       l = elems.length,
                        fragment = context.createDocumentFragment(),
                        safe = context === document && safeFragment;
 
@@ -629,15 +631,16 @@ jQuery.extend({
                        context = document;
                }
 
-               for ( i = 0; (elem = elems[i]) != null; i++ ) {
+               for ( ; i < l; i++ ) {
+                       elem = elems[ i ];
                        if ( elem || elem === 0 ) {
                                // Add nodes directly
                                if ( jQuery.type( elem ) === "object" ) {
-                                       jQuery.merge( ret, elem.nodeType ? [ elem ] : elem );
+                                       jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
 
                                // Convert non-html into a text node
                                } else if ( !rhtml.test( elem ) ) {
-                                       ret.push( context.createTextNode( elem ) );
+                                       nodes.push( context.createTextNode( elem ) );
 
                                // Convert html into DOM nodes
                                } else {
@@ -658,7 +661,7 @@ jQuery.extend({
 
                                        // Manually add leading whitespace removed by IE
                                        if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               ret.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+                                               nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
                                        }
 
                                        // Remove IE's autoinserted <tbody> from table fragments
@@ -681,7 +684,7 @@ jQuery.extend({
                                                }
                                        }
 
-                                       jQuery.merge( ret, tmp.childNodes );
+                                       jQuery.merge( nodes, tmp.childNodes );
 
                                        // Fix #12392 for WebKit and IE > 9
                                        tmp.textContent = "";
@@ -705,10 +708,11 @@ jQuery.extend({
                // Reset defaultChecked for any radios and checkboxes
                // about to be appended to the DOM in IE 6/7 (#8060)
                if ( !jQuery.support.appendChecked ) {
-                       jQuery.grep( getAll( ret, "input" ), fixDefaultChecked );
+                       jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
                }
 
-               for ( i = 0; (elem = ret[i]) != null; i++ ) {
+               i = 0;
+               while ( (elem = nodes[ i++ ]) ) {
                        safe = jQuery.contains( elem.ownerDocument, elem );
 
                        // Append to fragment
@@ -726,7 +730,8 @@ jQuery.extend({
 
                        // Capture executables
                        if ( scripts ) {
-                               for ( j = 0; (elem = tmp[j]) != null; j++ ) {
+                               j = 0;
+                               while ( (elem = tmp[ j++ ]) ) {
                                        if ( rscriptType.test( elem.type || "" ) ) {
                                                scripts.push( elem );
                                        }
index 0a110725e42a000806e3bd10afe55937f70d6ad4..74e482a47c6bc2f4c0747943df80666eb1f556b6 100644 (file)
@@ -395,7 +395,7 @@ var testAppendForObject = function( valueObj, isFragment ) {
 
 var testAppend = function( valueObj ) {
 
-       expect( 59 );
+       expect( 60 );
 
        testAppendForObject( valueObj, false );
        testAppendForObject( valueObj, true );
@@ -464,6 +464,7 @@ var testAppend = function( valueObj ) {
        t( "Append Select", "#appendSelect1, #appendSelect2", [ "appendSelect1", "appendSelect2" ] );
 
        equal( "Two nodes", jQuery("<div />").append( "Two", " nodes" ).text(), "Appending two text nodes (#4011)" );
+       equal( jQuery("<div />").append( "1", "", 3 ).text(), "13", "If median is false-like value, subsequent arguments should not be ignored" );
 
        // using contents will get comments regular, text, and comment nodes
        j = jQuery("#nonnodes").contents();