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