OSDN Git Service

new repo
[bytom/vapor.git] / tools / side_chain_tool / web / node_modules / jquery / src / traversing / findFilter.js
1 define( [
2         "../core",
3         "../var/indexOf",
4         "../var/isFunction",
5         "./var/rneedsContext",
6         "../selector"
7 ], function( jQuery, indexOf, isFunction, rneedsContext ) {
8
9 "use strict";
10
11 // Implement the identical functionality for filter and not
12 function winnow( elements, qualifier, not ) {
13         if ( isFunction( qualifier ) ) {
14                 return jQuery.grep( elements, function( elem, i ) {
15                         return !!qualifier.call( elem, i, elem ) !== not;
16                 } );
17         }
18
19         // Single element
20         if ( qualifier.nodeType ) {
21                 return jQuery.grep( elements, function( elem ) {
22                         return ( elem === qualifier ) !== not;
23                 } );
24         }
25
26         // Arraylike of elements (jQuery, arguments, Array)
27         if ( typeof qualifier !== "string" ) {
28                 return jQuery.grep( elements, function( elem ) {
29                         return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
30                 } );
31         }
32
33         // Filtered directly for both simple and complex selectors
34         return jQuery.filter( qualifier, elements, not );
35 }
36
37 jQuery.filter = function( expr, elems, not ) {
38         var elem = elems[ 0 ];
39
40         if ( not ) {
41                 expr = ":not(" + expr + ")";
42         }
43
44         if ( elems.length === 1 && elem.nodeType === 1 ) {
45                 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
46         }
47
48         return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
49                 return elem.nodeType === 1;
50         } ) );
51 };
52
53 jQuery.fn.extend( {
54         find: function( selector ) {
55                 var i, ret,
56                         len = this.length,
57                         self = this;
58
59                 if ( typeof selector !== "string" ) {
60                         return this.pushStack( jQuery( selector ).filter( function() {
61                                 for ( i = 0; i < len; i++ ) {
62                                         if ( jQuery.contains( self[ i ], this ) ) {
63                                                 return true;
64                                         }
65                                 }
66                         } ) );
67                 }
68
69                 ret = this.pushStack( [] );
70
71                 for ( i = 0; i < len; i++ ) {
72                         jQuery.find( selector, self[ i ], ret );
73                 }
74
75                 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
76         },
77         filter: function( selector ) {
78                 return this.pushStack( winnow( this, selector || [], false ) );
79         },
80         not: function( selector ) {
81                 return this.pushStack( winnow( this, selector || [], true ) );
82         },
83         is: function( selector ) {
84                 return !!winnow(
85                         this,
86
87                         // If this is a positional/relative selector, check membership in the returned set
88                         // so $("p:first").is("p:last") won't return true for a doc with two "p".
89                         typeof selector === "string" && rneedsContext.test( selector ) ?
90                                 jQuery( selector ) :
91                                 selector || [],
92                         false
93                 ).length;
94         }
95 } );
96
97 } );