Fixed #1854 by using wizzud's suggestion. The only real difference is the code is only called when there is more than a single selector. So there should be no speed decrease in the current working cases. Only additional functionality for cases that used to fail.

This commit is contained in:
David Serduke 2007-12-13 22:24:59 +00:00
parent 3e3b86c7a7
commit da33a981c6
5 changed files with 29 additions and 14 deletions

View file

@ -342,15 +342,14 @@ jQuery.fn = jQuery.prototype = {
},
not: function( selector ) {
return this.pushStack(
selector.constructor == String &&
jQuery.multiFilter( selector, this, true ) ||
if (selector.constructor == String)
// test special case where just one selector is passed in
if ( /^.[^:#\[\.]*$/.test(selector) )
return this.pushStack( jQuery.multiFilter( selector, this, true ) );
else
selector = jQuery.multiFilter( selector, this );
jQuery.grep(this, function(elem) {
return selector.constructor == Array || selector.jquery ?
jQuery.inArray( elem, selector ) < 0 :
elem != selector;
}) );
return this.pushStack( jQuery.removeFromArray( selector, this ) );
},
add: function( selector ) {
@ -1093,6 +1092,13 @@ jQuery.extend({
return -1;
},
removeFromArray: function( remove, from ) {
var isArrayLike = remove.length && remove[remove.length - 1] !== undefined;
return jQuery.grep(from, function(elem) {
return isArrayLike ? jQuery.inArray( elem, remove ) < 0 : elem != from;
});
},
merge: function( first, second ) {
// We have to loop this way because IE & Opera overwrite the length
// expando of getElementsByTagName