From 820be0696f64b2c939f380c9aa02fa9f4c97a688 Mon Sep 17 00:00:00 2001 From: Ben Barber Date: Wed, 27 Apr 2011 15:18:32 -0500 Subject: [PATCH 1/3] Bug 6863; Use array.join() for string concatenation in getText() --- sizzle.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sizzle.js b/sizzle.js index d9a47d9d..a7a8de86 100644 --- a/sizzle.js +++ b/sizzle.js @@ -995,22 +995,24 @@ if ( document.documentElement.compareDocumentPosition ) { // Utility function for retreiving the text value of an array of DOM nodes Sizzle.getText = function( elems ) { - var ret = "", elem; + var elem, nodeType, + ret = []; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; + nodeType = elem.nodeType; // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; + if ( nodeType === 3 || nodeType === 4 ) { + ret[ ret.length ] = elem.nodeValue; // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); + } else if ( nodeType !== 8 ) { + ret[ ret.length ] = Sizzle.getText( elem.childNodes ); } } - return ret; + return ret.join( '' ); }; // Check to see if the browser returns elements by name when From 6e82c3a9831fc7e735a4ab91a8f539bfec1dba16 Mon Sep 17 00:00:00 2001 From: Ben Barber Date: Fri, 29 Apr 2011 09:34:17 -0500 Subject: [PATCH 2/3] Revert "Bug 6863; Use array.join() for string concatenation in getText()" This reverts commit 820be0696f64b2c939f380c9aa02fa9f4c97a688. --- sizzle.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/sizzle.js b/sizzle.js index a7a8de86..d9a47d9d 100644 --- a/sizzle.js +++ b/sizzle.js @@ -995,24 +995,22 @@ if ( document.documentElement.compareDocumentPosition ) { // Utility function for retreiving the text value of an array of DOM nodes Sizzle.getText = function( elems ) { - var elem, nodeType, - ret = []; + var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; - nodeType = elem.nodeType; // Get the text from text nodes and CDATA nodes - if ( nodeType === 3 || nodeType === 4 ) { - ret[ ret.length ] = elem.nodeValue; + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; // Traverse everything else, except comment nodes - } else if ( nodeType !== 8 ) { - ret[ ret.length ] = Sizzle.getText( elem.childNodes ); + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); } } - return ret.join( '' ); + return ret; }; // Check to see if the browser returns elements by name when From ef5b3cceb05d61e89d0c191c094ca2cd1c522628 Mon Sep 17 00:00:00 2001 From: Ben Barber Date: Fri, 29 Apr 2011 09:46:13 -0500 Subject: [PATCH 3/3] Bug 6863; getText performance boost from using node.nextSibling iteration and refactoring. --- sizzle.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/sizzle.js b/sizzle.js index d9a47d9d..495ae9ec 100644 --- a/sizzle.js +++ b/sizzle.js @@ -995,18 +995,21 @@ if ( document.documentElement.compareDocumentPosition ) { // Utility function for retreiving the text value of an array of DOM nodes Sizzle.getText = function( elems ) { - var ret = "", elem; + var nodeType = elems.nodeType, + ret = ""; - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); + // Get text from the array elements if this is not a node + if ( nodeType == null ) { + for ( var i = 0; elems[i]; i++ ) { + ret += Sizzle.getText( elems[i] ); + } + // Get the text from text nodes and CDATA nodes + } else if ( nodeType === 3 || nodeType === 4 ) { + ret += elems.nodeValue; + // Traverse everything else, except comment nodes + } else if ( nodeType !== 8 ) { + for ( var node = elems.firstChild; node; node = node.nextSibling) { + ret += Sizzle.getText( node ); } }