From f094c803deba3c35c66f9dc0923db800fb088753 Mon Sep 17 00:00:00 2001 From: John Resig Date: Wed, 25 Feb 2009 18:29:18 +0000 Subject: [PATCH] Made some changes to how .find() works, inlined the duplicate check - should change other methods to act similarly. Goes towards fixing #4240. --- src/core.js | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/core.js b/src/core.js index 55e6236..7ff9d15 100644 --- a/src/core.js +++ b/src/core.js @@ -286,18 +286,26 @@ jQuery.fn = jQuery.prototype = { splice: [].splice, find: function( selector ) { - if ( this.length === 1 ) { - var ret = this.pushStack( "", "find", selector ); - jQuery.find( selector, this[0], ret ); - return ret; - } else { - var ret = this.pushStack( "", "find", selector ); - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.find( selector, this[i], ret ); + var ret = this.pushStack( "", "find", selector ), length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } } - //jQuery.find.uniqueSort( ret ); - return ret; } + + return ret; }, clone: function( events ) { -- 1.7.10.4