Added some improvements to changes made in [4143] for #1854.
This commit is contained in:
parent
da33a981c6
commit
7120b56caa
18
src/core.js
18
src/core.js
|
@ -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
|
||||||
|
@ -342,14 +345,16 @@ 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
|
||||||
|
|
|
@ -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] == "." )
|
||||||
|
|
Loading…
Reference in a new issue