1 | define([
|
2 | "../core",
|
3 | "../var/indexOf",
|
4 | "./var/rneedsContext",
|
5 | "../selector"
|
6 | ], function( jQuery, indexOf, rneedsContext ) {
|
7 |
|
8 | var risSimple = /^.[^:#\[\.,]*$/;
|
9 |
|
10 |
|
11 | function winnow( elements, qualifier, not ) {
|
12 | if ( jQuery.isFunction( qualifier ) ) {
|
13 | return jQuery.grep( elements, function( elem, i ) {
|
14 |
|
15 | return !!qualifier.call( elem, i, elem ) !== not;
|
16 | });
|
17 |
|
18 | }
|
19 |
|
20 | if ( qualifier.nodeType ) {
|
21 | return jQuery.grep( elements, function( elem ) {
|
22 | return ( elem === qualifier ) !== not;
|
23 | });
|
24 |
|
25 | }
|
26 |
|
27 | if ( typeof qualifier === "string" ) {
|
28 | if ( risSimple.test( qualifier ) ) {
|
29 | return jQuery.filter( qualifier, elements, not );
|
30 | }
|
31 |
|
32 | qualifier = jQuery.filter( qualifier, elements );
|
33 | }
|
34 |
|
35 | return jQuery.grep( elements, function( elem ) {
|
36 | return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
|
37 | });
|
38 | }
|
39 |
|
40 | jQuery.filter = function( expr, elems, not ) {
|
41 | var elem = elems[ 0 ];
|
42 |
|
43 | if ( not ) {
|
44 | expr = ":not(" + expr + ")";
|
45 | }
|
46 |
|
47 | return elems.length === 1 && elem.nodeType === 1 ?
|
48 | jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
|
49 | jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
|
50 | return elem.nodeType === 1;
|
51 | }));
|
52 | };
|
53 |
|
54 | jQuery.fn.extend({
|
55 | find: function( selector ) {
|
56 | var i,
|
57 | len = this.length,
|
58 | ret = [],
|
59 | self = this;
|
60 |
|
61 | if ( typeof selector !== "string" ) {
|
62 | return this.pushStack( jQuery( selector ).filter(function() {
|
63 | for ( i = 0; i < len; i++ ) {
|
64 | if ( jQuery.contains( self[ i ], this ) ) {
|
65 | return true;
|
66 | }
|
67 | }
|
68 | }) );
|
69 | }
|
70 |
|
71 | for ( i = 0; i < len; i++ ) {
|
72 | jQuery.find( selector, self[ i ], ret );
|
73 | }
|
74 |
|
75 |
|
76 | ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
|
77 | ret.selector = this.selector ? this.selector + " " + selector : selector;
|
78 | return ret;
|
79 | },
|
80 | filter: function( selector ) {
|
81 | return this.pushStack( winnow(this, selector || [], false) );
|
82 | },
|
83 | not: function( selector ) {
|
84 | return this.pushStack( winnow(this, selector || [], true) );
|
85 | },
|
86 | is: function( selector ) {
|
87 | return !!winnow(
|
88 | this,
|
89 |
|
90 |
|
91 |
|
92 | typeof selector === "string" && rneedsContext.test( selector ) ?
|
93 | jQuery( selector ) :
|
94 | selector || [],
|
95 | false
|
96 | ).length;
|
97 | }
|
98 | });
|
99 |
|
100 | });
|