aboutsummaryrefslogtreecommitdiffstats
path: root/src/core.js
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2009-02-25 18:29:18 +0000
committerJohn Resig <jeresig@gmail.com>2009-02-25 18:29:18 +0000
commitf094c803deba3c35c66f9dc0923db800fb088753 (patch)
tree8d864ebb42ab8b2741e704bf63604174c606830b /src/core.js
parent4bbb70b4eb0bcd93c99c0bfcfcf4fc44504c4c41 (diff)
downloadjquery-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.js28
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 ) {