annotate default/node_modules/jquery/src/traversing.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "./core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "./var/indexOf",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "./traversing/var/dir",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./traversing/var/siblings",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "./traversing/var/rneedsContext",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "./core/nodeName",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 "./core/init",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 "./traversing/findFilter",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 "./selector"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 ], function( jQuery, indexOf, dir, siblings, rneedsContext, nodeName ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 // Methods guaranteed to produce a unique set when starting from a unique set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 guaranteedUnique = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 children: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 contents: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 next: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 prev: true
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26 jQuery.fn.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 has: function( target ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 var targets = jQuery( target, this ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 l = targets.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 return this.filter( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 var i = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 for ( ; i < l; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 if ( jQuery.contains( this, targets[ i ] ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 return true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 closest: function( selectors, context ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 var cur,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 i = 0,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 l = this.length,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 matched = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 targets = typeof selectors !== "string" && jQuery( selectors );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 // Positional selectors never match, since there's no _selection_ context
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 if ( !rneedsContext.test( selectors ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 for ( ; i < l; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 // Always skip document fragments
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 if ( cur.nodeType < 11 && ( targets ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 targets.index( cur ) > -1 :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 // Don't pass non-elements to Sizzle
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 cur.nodeType === 1 &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 jQuery.find.matchesSelector( cur, selectors ) ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 matched.push( cur );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 break;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 // Determine the position of an element within the set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 index: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 // No argument, return index in parent
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 if ( !elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 // Index in selector
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 if ( typeof elem === "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 return indexOf.call( jQuery( elem ), this[ 0 ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 // Locate the position of the desired element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 return indexOf.call( this,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 // If it receives a jQuery object, the first element is used
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 elem.jquery ? elem[ 0 ] : elem
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 add: function( selector, context ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 return this.pushStack(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 jQuery.uniqueSort(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 jQuery.merge( this.get(), jQuery( selector, context ) )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 addBack: function( selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 return this.add( selector == null ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 this.prevObject : this.prevObject.filter( selector )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 function sibling( cur, dir ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 return cur;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 jQuery.each( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 parent: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 var parent = elem.parentNode;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 return parent && parent.nodeType !== 11 ? parent : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 parents: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 return dir( elem, "parentNode" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 parentsUntil: function( elem, i, until ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 return dir( elem, "parentNode", until );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 next: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 return sibling( elem, "nextSibling" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126 prev: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 return sibling( elem, "previousSibling" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 nextAll: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 return dir( elem, "nextSibling" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 prevAll: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 return dir( elem, "previousSibling" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 nextUntil: function( elem, i, until ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 return dir( elem, "nextSibling", until );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 prevUntil: function( elem, i, until ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 return dir( elem, "previousSibling", until );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 siblings: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 return siblings( ( elem.parentNode || {} ).firstChild, elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 children: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 return siblings( elem.firstChild );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 contents: function( elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 if ( nodeName( elem, "iframe" ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 return elem.contentDocument;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 // Treat the template element as a regular one in browsers that
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 // don't support it.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 if ( nodeName( elem, "template" ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 elem = elem.content || elem;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 return jQuery.merge( [], elem.childNodes );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 }, function( name, fn ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 jQuery.fn[ name ] = function( until, selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 var matched = jQuery.map( this, fn, until );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 if ( name.slice( -5 ) !== "Until" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 selector = until;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169 if ( selector && typeof selector === "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 matched = jQuery.filter( selector, matched );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173 if ( this.length > 1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 // Remove duplicates
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 if ( !guaranteedUnique[ name ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177 jQuery.uniqueSort( matched );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 // Reverse order for parents* and prev-derivatives
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181 if ( rparentsprev.test( name ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182 matched.reverse();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 return this.pushStack( matched );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190 return jQuery;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 } );