Avoid running jQuery.unique() for methods that are guaranteed to produce a unique result set. Fixes #7964 - Some traversal methods perform an unnecessary uniqueness check.

This commit is contained in:
Scott González 2011-01-14 09:55:40 -05:00
parent a8fa5f2ec1
commit e5ee89ec9a

View file

@ -6,7 +6,14 @@ var runtil = /Until$/,
rmultiselector = /,/, rmultiselector = /,/,
isSimple = /^.[^:#\[\.,]*$/, isSimple = /^.[^:#\[\.,]*$/,
slice = Array.prototype.slice, slice = Array.prototype.slice,
POS = jQuery.expr.match.POS; POS = jQuery.expr.match.POS,
// methods guaranteed to produce a unique set when starting from a unique set
guaranteedUnique = {
children: true,
contents: true,
next: true,
prev: true
};
jQuery.fn.extend({ jQuery.fn.extend({
find: function( selector ) { find: function( selector ) {
@ -206,7 +213,7 @@ jQuery.each({
ret = jQuery.filter( selector, ret ); ret = jQuery.filter( selector, ret );
} }
ret = this.length > 1 ? jQuery.unique( ret ) : ret; ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse(); ret = ret.reverse();