Skip to content
Permalink
Browse files

Fix #12816. Ensure .find() result are DOM ordered.

  • Loading branch information...
dmethvin committed Nov 1, 2012
1 parent e8cf41a commit 5ed0450dc471f61e4c5d5df30df3f3294a3e6bd6
Showing with 10 additions and 30 deletions.
  1. +10 −30 src/traversing.js
@@ -12,46 +12,26 @@ var runtil = /Until$/,


jQuery.fn.extend({ jQuery.fn.extend({
find: function( selector ) { find: function( selector ) {
var prevLength, n, r, ret, var i, ret, self;
i = 0,
self = this,
selfLength = this.length;


if ( typeof selector !== "string" ) { if ( typeof selector !== "string" ) {

self = this;
ret = jQuery( selector ).filter(function() { return this.pushStack( jQuery( selector ).filter(function() {
for ( ; i < selfLength; i++ ) { for ( i = 0; i < self.length; i++ ) {
if ( jQuery.contains( self[ i ], this ) ) { if ( jQuery.contains( self[ i ], this ) ) {
return true; return true;
} }
} }
}); }) );

}
} else {


ret = []; ret = [];
for ( ; i < selfLength; i++ ) { for ( i = 0; i < this.length; i++ ) {
prevLength = ret.length; jQuery.find( selector, this[ i ], ret );
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 = this.pushStack( jQuery.unique( ret ) );
ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
return ret; return ret;
}, },

1 comment on commit 5ed0450

@dmethvin

This comment has been minimized.

Copy link
Member Author

commented on 5ed0450 Nov 1, 2012

Damn, forgot to add another test!

Please sign in to comment.
You can’t perform that action at this time.