Added some improvements to changes made in [4143] for #1854.

This commit is contained in:
John Resig 2007-12-13 22:58:59 +00:00
parent da33a981c6
commit 7120b56caa
2 changed files with 11 additions and 14 deletions

View file

@ -29,6 +29,9 @@ window.$ = jQuery;
// (both of which we optimize for) // (both of which we optimize for)
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/; var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
// Is it a simple selector
var isSimple = /^.[^:#\[\.]*$/;
jQuery.fn = jQuery.prototype = { jQuery.fn = jQuery.prototype = {
init: function( selector, context ) { init: function( selector, context ) {
// Make sure that a selection was provided // Make sure that a selection was provided
@ -344,12 +347,14 @@ jQuery.fn = jQuery.prototype = {
not: function( selector ) { not: function( selector ) {
if ( selector.constructor == String ) if ( selector.constructor == String )
// test special case where just one selector is passed in // test special case where just one selector is passed in
if ( /^.[^:#\[\.]*$/.test(selector) ) if ( isSimple.test( selector ) )
return this.pushStack( jQuery.multiFilter( selector, this, true ) ); return this.pushStack( jQuery.multiFilter( selector, this, true ) );
else else
selector = jQuery.multiFilter( selector, this ); selector = jQuery.multiFilter( selector, this );
return this.pushStack( jQuery.removeFromArray( selector, this ) ); return this.filter(function() {
return jQuery.inArray( this, selector ) < 0;
});
}, },
add: function( selector ) { add: function( selector ) {
@ -1092,13 +1097,6 @@ jQuery.extend({
return -1; 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 ) { merge: function( first, second ) {
// We have to loop this way because IE & Opera overwrite the length // We have to loop this way because IE & Opera overwrite the length
// expando of getElementsByTagName // expando of getElementsByTagName

View file

@ -321,10 +321,9 @@ jQuery.extend({
// keeping it out of the expression list // keeping it out of the expression list
if ( m[1] == ":" && m[2] == "not" ) if ( m[1] == ":" && m[2] == "not" )
// optimize if only one selector found (most common case) // optimize if only one selector found (most common case)
if ( /^.[^:#\[\.]*$/.test(m[3]) ) r = isSimple.test( m[3] ) ?
r = jQuery.filter(m[3], r, true).r; jQuery.filter(m[3], r, true).r :
else jQuery( r ).not( m[3] );
r = jQuery.removeFromArray(jQuery.multiFilter(m[3], r), r);
// We can get a big speed boost by filtering by class here // We can get a big speed boost by filtering by class here
else if ( m[1] == "." ) else if ( m[1] == "." )