scratch – Blame information for rev 58

Subversion Repositories:
Rev:
Rev Author Line No. Line
58 office 1 define( [
2 "../core",
3 "../var/indexOf",
4 "./var/rneedsContext",
5 "../selector"
6 ], function( jQuery, indexOf, rneedsContext ) {
7  
8 "use strict";
9  
10 var risSimple = /^.[^:#\[\.,]*$/;
11  
12 // Implement the identical functionality for filter and not
13 function winnow( elements, qualifier, not ) {
14 if ( jQuery.isFunction( qualifier ) ) {
15 return jQuery.grep( elements, function( elem, i ) {
16 return !!qualifier.call( elem, i, elem ) !== not;
17 } );
18 }
19  
20 // Single element
21 if ( qualifier.nodeType ) {
22 return jQuery.grep( elements, function( elem ) {
23 return ( elem === qualifier ) !== not;
24 } );
25 }
26  
27 // Arraylike of elements (jQuery, arguments, Array)
28 if ( typeof qualifier !== "string" ) {
29 return jQuery.grep( elements, function( elem ) {
30 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
31 } );
32 }
33  
34 // Simple selector that can be filtered directly, removing non-Elements
35 if ( risSimple.test( qualifier ) ) {
36 return jQuery.filter( qualifier, elements, not );
37 }
38  
39 // Complex selector, compare the two sets, removing non-Elements
40 qualifier = jQuery.filter( qualifier, elements );
41 return jQuery.grep( elements, function( elem ) {
42 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
43 } );
44 }
45  
46 jQuery.filter = function( expr, elems, not ) {
47 var elem = elems[ 0 ];
48  
49 if ( not ) {
50 expr = ":not(" + expr + ")";
51 }
52  
53 if ( elems.length === 1 && elem.nodeType === 1 ) {
54 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
55 }
56  
57 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
58 return elem.nodeType === 1;
59 } ) );
60 };
61  
62 jQuery.fn.extend( {
63 find: function( selector ) {
64 var i, ret,
65 len = this.length,
66 self = this;
67  
68 if ( typeof selector !== "string" ) {
69 return this.pushStack( jQuery( selector ).filter( function() {
70 for ( i = 0; i < len; i++ ) {
71 if ( jQuery.contains( self[ i ], this ) ) {
72 return true;
73 }
74 }
75 } ) );
76 }
77  
78 ret = this.pushStack( [] );
79  
80 for ( i = 0; i < len; i++ ) {
81 jQuery.find( selector, self[ i ], ret );
82 }
83  
84 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
85 },
86 filter: function( selector ) {
87 return this.pushStack( winnow( this, selector || [], false ) );
88 },
89 not: function( selector ) {
90 return this.pushStack( winnow( this, selector || [], true ) );
91 },
92 is: function( selector ) {
93 return !!winnow(
94 this,
95  
96 // If this is a positional/relative selector, check membership in the returned set
97 // so $("p:first").is("p:last") won't return true for a doc with two "p".
98 typeof selector === "string" && rneedsContext.test( selector ) ?
99 jQuery( selector ) :
100 selector || [],
101 false
102 ).length;
103 }
104 } );
105  
106 } );