/bower_components/jquery/src/traversing/findFilter.js |
@@ -0,0 +1,106 @@ |
define( [ |
"../core", |
"../var/indexOf", |
"./var/rneedsContext", |
"../selector" |
], function( jQuery, indexOf, rneedsContext ) { |
|
"use strict"; |
|
var risSimple = /^.[^:#\[\.,]*$/; |
|
// Implement the identical functionality for filter and not |
function winnow( elements, qualifier, not ) { |
if ( jQuery.isFunction( qualifier ) ) { |
return jQuery.grep( elements, function( elem, i ) { |
return !!qualifier.call( elem, i, elem ) !== not; |
} ); |
} |
|
// Single element |
if ( qualifier.nodeType ) { |
return jQuery.grep( elements, function( elem ) { |
return ( elem === qualifier ) !== not; |
} ); |
} |
|
// Arraylike of elements (jQuery, arguments, Array) |
if ( typeof qualifier !== "string" ) { |
return jQuery.grep( elements, function( elem ) { |
return ( indexOf.call( qualifier, elem ) > -1 ) !== not; |
} ); |
} |
|
// Simple selector that can be filtered directly, removing non-Elements |
if ( risSimple.test( qualifier ) ) { |
return jQuery.filter( qualifier, elements, not ); |
} |
|
// Complex selector, compare the two sets, removing non-Elements |
qualifier = jQuery.filter( qualifier, elements ); |
return jQuery.grep( elements, function( elem ) { |
return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; |
} ); |
} |
|
jQuery.filter = function( expr, elems, not ) { |
var elem = elems[ 0 ]; |
|
if ( not ) { |
expr = ":not(" + expr + ")"; |
} |
|
if ( elems.length === 1 && elem.nodeType === 1 ) { |
return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; |
} |
|
return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { |
return elem.nodeType === 1; |
} ) ); |
}; |
|
jQuery.fn.extend( { |
find: function( selector ) { |
var i, ret, |
len = this.length, |
self = this; |
|
if ( typeof selector !== "string" ) { |
return this.pushStack( jQuery( selector ).filter( function() { |
for ( i = 0; i < len; i++ ) { |
if ( jQuery.contains( self[ i ], this ) ) { |
return true; |
} |
} |
} ) ); |
} |
|
ret = this.pushStack( [] ); |
|
for ( i = 0; i < len; i++ ) { |
jQuery.find( selector, self[ i ], ret ); |
} |
|
return len > 1 ? jQuery.uniqueSort( ret ) : ret; |
}, |
filter: function( selector ) { |
return this.pushStack( winnow( this, selector || [], false ) ); |
}, |
not: function( selector ) { |
return this.pushStack( winnow( this, selector || [], true ) ); |
}, |
is: function( selector ) { |
return !!winnow( |
this, |
|
// If this is a positional/relative selector, check membership in the returned set |
// so $("p:first").is("p:last") won't return true for a doc with two "p". |
typeof selector === "string" && rneedsContext.test( selector ) ? |
jQuery( selector ) : |
selector || [], |
false |
).length; |
} |
} ); |
|
} ); |