diff options
author | John Resig <jeresig@gmail.com> | 2009-02-25 18:29:18 +0000 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2009-02-25 18:29:18 +0000 |
commit | f094c803deba3c35c66f9dc0923db800fb088753 (patch) | |
tree | 8d864ebb42ab8b2741e704bf63604174c606830b /src/core.js | |
parent | 4bbb70b4eb0bcd93c99c0bfcfcf4fc44504c4c41 (diff) | |
download | jquery-f094c803deba3c35c66f9dc0923db800fb088753.tar.gz jquery-f094c803deba3c35c66f9dc0923db800fb088753.zip |
Made some changes to how .find() works, inlined the duplicate check - should change other methods to act similarly. Goes towards fixing #4240.
Diffstat (limited to 'src/core.js')
-rw-r--r-- | src/core.js | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/core.js b/src/core.js index 55e62363f..7ff9d15cd 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 ) { |