Commit 46bbda8d authored by Oleg's avatar Oleg Committed by Richard Gibson

Ref gh-1117: Don't stop on a falsy value in buildFragment.

(cherry picked from commit 8e6c1ba9)
parent a777b355
...@@ -619,8 +619,10 @@ jQuery.extend({ ...@@ -619,8 +619,10 @@ jQuery.extend({
}, },
buildFragment: function( elems, context, scripts, selection ) { buildFragment: function( elems, context, scripts, selection ) {
var elem, i, j, tmp, tag, wrap, tbody, var elem, j, tmp, tag, wrap, tbody,
ret = [], nodes = [],
i = 0,
l = elems.length,
fragment = context.createDocumentFragment(), fragment = context.createDocumentFragment(),
safe = context === document && safeFragment; safe = context === document && safeFragment;
...@@ -629,15 +631,16 @@ jQuery.extend({ ...@@ -629,15 +631,16 @@ jQuery.extend({
context = document; context = document;
} }
for ( i = 0; (elem = elems[i]) != null; i++ ) { for ( ; i < l; i++ ) {
elem = elems[ i ];
if ( elem || elem === 0 ) { if ( elem || elem === 0 ) {
// Add nodes directly // Add nodes directly
if ( jQuery.type( elem ) === "object" ) { 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 // Convert non-html into a text node
} else if ( !rhtml.test( elem ) ) { } else if ( !rhtml.test( elem ) ) {
ret.push( context.createTextNode( elem ) ); nodes.push( context.createTextNode( elem ) );
// Convert html into DOM nodes // Convert html into DOM nodes
} else { } else {
...@@ -658,7 +661,7 @@ jQuery.extend({ ...@@ -658,7 +661,7 @@ jQuery.extend({
// Manually add leading whitespace removed by IE // Manually add leading whitespace removed by IE
if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { 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 // Remove IE's autoinserted <tbody> from table fragments
...@@ -681,7 +684,7 @@ jQuery.extend({ ...@@ -681,7 +684,7 @@ jQuery.extend({
} }
} }
jQuery.merge( ret, tmp.childNodes ); jQuery.merge( nodes, tmp.childNodes );
// Fix #12392 for WebKit and IE > 9 // Fix #12392 for WebKit and IE > 9
tmp.textContent = ""; tmp.textContent = "";
...@@ -705,10 +708,11 @@ jQuery.extend({ ...@@ -705,10 +708,11 @@ jQuery.extend({
// Reset defaultChecked for any radios and checkboxes // Reset defaultChecked for any radios and checkboxes
// about to be appended to the DOM in IE 6/7 (#8060) // about to be appended to the DOM in IE 6/7 (#8060)
if ( !jQuery.support.appendChecked ) { 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 ); safe = jQuery.contains( elem.ownerDocument, elem );
// Append to fragment // Append to fragment
...@@ -726,7 +730,8 @@ jQuery.extend({ ...@@ -726,7 +730,8 @@ jQuery.extend({
// Capture executables // Capture executables
if ( scripts ) { if ( scripts ) {
for ( j = 0; (elem = tmp[j]) != null; j++ ) { j = 0;
while ( (elem = tmp[ j++ ]) ) {
if ( rscriptType.test( elem.type || "" ) ) { if ( rscriptType.test( elem.type || "" ) ) {
scripts.push( elem ); scripts.push( elem );
} }
......
...@@ -395,7 +395,7 @@ var testAppendForObject = function( valueObj, isFragment ) { ...@@ -395,7 +395,7 @@ var testAppendForObject = function( valueObj, isFragment ) {
var testAppend = function( valueObj ) { var testAppend = function( valueObj ) {
expect( 59 ); expect( 60 );
testAppendForObject( valueObj, false ); testAppendForObject( valueObj, false );
testAppendForObject( valueObj, true ); testAppendForObject( valueObj, true );
...@@ -464,6 +464,7 @@ var testAppend = function( valueObj ) { ...@@ -464,6 +464,7 @@ var testAppend = function( valueObj ) {
t( "Append Select", "#appendSelect1, #appendSelect2", [ "appendSelect1", "appendSelect2" ] ); t( "Append Select", "#appendSelect1, #appendSelect2", [ "appendSelect1", "appendSelect2" ] );
equal( "Two nodes", jQuery("<div />").append( "Two", " nodes" ).text(), "Appending two text nodes (#4011)" ); 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 // using contents will get comments regular, text, and comment nodes
j = jQuery("#nonnodes").contents(); j = jQuery("#nonnodes").contents();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment