aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMike Sherov <mike.sherov@gmail.com>2012-10-30 13:32:53 -0400
committerDave Methvin <dave.methvin@gmail.com>2012-10-30 13:32:53 -0400
commite8f91514a6f353e85d8117998087903dc7331210 (patch)
tree9574915a5e6eff125ae846a36f1e386ed032b733 /src
parentc78a3ba6577b6735137abcd5c01a35ca28c33660 (diff)
downloadjquery-e8f91514a6f353e85d8117998087903dc7331210.tar.gz
jquery-e8f91514a6f353e85d8117998087903dc7331210.zip
Fix #12009. $().find( DOMElement ) should pushStack properly. Close gh-927.
Diffstat (limited to 'src')
-rw-r--r--src/traversing.js41
1 files changed, 24 insertions, 17 deletions
diff --git a/src/traversing.js b/src/traversing.js
index 1f38d68cd..0d76038ca 100644
--- a/src/traversing.js
+++ b/src/traversing.js
@@ -12,39 +12,46 @@ var runtil = /Until$/,
jQuery.fn.extend({
find: function( selector ) {
- var i, l, length, n, r, ret,
- self = this;
+ var prevLength, n, r, ret,
+ i = 0,
+ self = this,
+ selfLength = this.length;
if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
+
+ ret = jQuery( selector ).filter(function() {
+ for ( ; i < selfLength; i++ ) {
if ( jQuery.contains( self[ i ], this ) ) {
return true;
}
}
});
- }
- ret = this.pushStack( [] );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
+ } else {
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
+ ret = [];
+ for ( ; i < selfLength; i++ ) {
+ prevLength = ret.length;
+ jQuery.find( selector, this[ i ], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ // by comparing the newly added elements on the ith
+ // iteration to the elements added by the previous iterations
+ for ( n = prevLength; n < ret.length; n++ ) {
+ for ( r = 0; r < prevLength; r++ ) {
+ if ( ret[ r ] === ret[ n ] ) {
+ ret.splice( n--, 1 );
break;
+ }
}
}
}
}
}
- // Needed because $( "selector", context ) becomes $( context ).find( "selector" )
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack( ret );
ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
return ret;
},