@@ -12,37 +12,38 @@ var runtil = /Until$/,
12
12
13
13
jQuery . fn . extend ( {
14
14
find : function ( selector ) {
15
- var i , ret , self ;
15
+ var self , matched , i ,
16
+ l = this . length ;
16
17
17
18
if ( typeof selector !== "string" ) {
18
19
self = this ;
19
20
return this . pushStack ( jQuery ( selector ) . filter ( function ( ) {
20
- for ( i = 0 ; i < self . length ; i ++ ) {
21
+ for ( i = 0 ; i < l ; i ++ ) {
21
22
if ( jQuery . contains ( self [ i ] , this ) ) {
22
23
return true ;
23
24
}
24
25
}
25
26
} ) ) ;
26
27
}
27
28
28
- ret = [ ] ;
29
- for ( i = 0 ; i < this . length ; i ++ ) {
30
- jQuery . find ( selector , this [ i ] , ret ) ;
29
+ matched = [ ] ;
30
+ for ( i = 0 ; i < l ; i ++ ) {
31
+ jQuery . find ( selector , this [ i ] , matched ) ;
31
32
}
32
33
33
34
// Needed because $( selector, context ) becomes $( context ).find( selector )
34
- ret = this . pushStack ( jQuery . unique ( ret ) ) ;
35
- ret . selector = ( this . selector ? this . selector + " " : "" ) + selector ;
36
- return ret ;
35
+ matched = this . pushStack ( jQuery . unique ( matched ) ) ;
36
+ matched . selector = ( this . selector ? this . selector + " " : "" ) + selector ;
37
+ return matched ;
37
38
} ,
38
39
39
40
has : function ( target ) {
40
- var i ,
41
- targets = jQuery ( target , this ) ,
42
- len = targets . length ;
41
+ var targets = jQuery ( target , this ) ,
42
+ l = targets . length ;
43
43
44
44
return this . filter ( function ( ) {
45
- for ( i = 0 ; i < len ; i ++ ) {
45
+ var i = 0 ;
46
+ for ( ; i < l ; i ++ ) {
46
47
if ( jQuery . contains ( this , targets [ i ] ) ) {
47
48
return true ;
48
49
}
@@ -64,33 +65,32 @@ jQuery.fn.extend({
64
65
// If this is a positional/relative selector, check membership in the returned set
65
66
// so $("p:first").is("p:last") won't return true for a doc with two "p".
66
67
rneedsContext . test ( selector ) ?
67
- jQuery ( selector , this . context ) . index ( this [ 0 ] ) >= 0 :
68
+ jQuery ( selector , this . context ) . index ( this [ 0 ] ) >= 0 :
68
69
jQuery . filter ( selector , this ) . length > 0 :
69
70
this . filter ( selector ) . length > 0 ) ;
70
71
} ,
71
72
72
73
closest : function ( selectors , context ) {
73
- var cur ,
74
- i = 0 ,
74
+ var cur , i = 0 ,
75
75
l = this . length ,
76
- ret = [ ] ,
77
- pos = rneedsContext . test ( selectors ) || typeof selectors !== "string" ?
76
+ matched = [ ] ,
77
+ pos = ( rneedsContext . test ( selectors ) || typeof selectors !== "string" ) ?
78
78
jQuery ( selectors , context || this . context ) :
79
79
0 ;
80
80
81
81
for ( ; i < l ; i ++ ) {
82
- cur = this [ i ] ;
82
+ cur = this [ i ] ;
83
83
84
- while ( cur && cur . ownerDocument && cur !== context && cur . nodeType !== 11 ) {
85
- if ( pos ? pos . index ( cur ) > - 1 : jQuery . find . matchesSelector ( cur , selectors ) ) {
86
- ret . push ( cur ) ;
84
+ while ( cur && cur . ownerDocument && cur !== context ) {
85
+ if ( pos ? pos . index ( cur ) > - 1 : jQuery . find . matchesSelector ( cur , selectors ) ) {
86
+ matched . push ( cur ) ;
87
87
break ;
88
88
}
89
- cur = cur . parentNode ;
89
+ cur = cur . parentElement ;
90
90
}
91
91
}
92
92
93
- return this . pushStack ( ret . length > 1 ? jQuery . unique ( ret ) : ret ) ;
93
+ return this . pushStack ( matched . length > 1 ? jQuery . unique ( matched ) : matched ) ;
94
94
} ,
95
95
96
96
// Determine the position of an element within
@@ -99,18 +99,20 @@ jQuery.fn.extend({
99
99
100
100
// No argument, return index in parent
101
101
if ( ! elem ) {
102
- return ( this [ 0 ] && this [ 0 ] . parentNode ) ? this . first ( ) . prevAll ( ) . length : - 1 ;
102
+ return ( this [ 0 ] && this [ 0 ] . parentNode ) ? this . first ( ) . prevAll ( ) . length : - 1 ;
103
103
}
104
104
105
105
// index in selector
106
106
if ( typeof elem === "string" ) {
107
- return jQuery . inArray ( this [ 0 ] , jQuery ( elem ) ) ;
107
+ return core_indexOf . call ( jQuery ( elem ) , this [ 0 ] ) ;
108
108
}
109
109
110
110
// Locate the position of the desired element
111
- return jQuery . inArray (
111
+ return core_indexOf . call ( this ,
112
+
112
113
// If it receives a jQuery object, the first element is used
113
- elem . jquery ? elem [ 0 ] : elem , this ) ;
114
+ elem . jquery ? elem [ 0 ] : elem
115
+ ) ;
114
116
} ,
115
117
116
118
add : function ( selector , context ) {
@@ -131,48 +133,42 @@ jQuery.fn.extend({
131
133
132
134
jQuery . fn . andSelf = jQuery . fn . addBack ;
133
135
134
- function sibling ( cur , dir ) {
135
- do {
136
- cur = cur [ dir ] ;
137
- } while ( cur && cur . nodeType !== 1 ) ;
138
-
139
- return cur ;
140
- }
141
-
142
136
jQuery . each ( {
143
137
parent : function ( elem ) {
144
- var parent = elem . parentNode ;
145
- return parent && parent . nodeType !== 11 ? parent : null ;
138
+ return elem . parentElement ;
146
139
} ,
147
140
parents : function ( elem ) {
148
- return jQuery . dir ( elem , "parentNode " ) ;
141
+ return jQuery . dir ( elem , "parentElement " ) ;
149
142
} ,
150
143
parentsUntil : function ( elem , i , until ) {
151
- return jQuery . dir ( elem , "parentNode " , until ) ;
144
+ return jQuery . dir ( elem , "parentElement " , until ) ;
152
145
} ,
153
146
next : function ( elem ) {
154
- return sibling ( elem , "nextSibling" ) ;
147
+ return elem . nextElementSibling ;
155
148
} ,
156
149
prev : function ( elem ) {
157
- return sibling ( elem , "previousSibling" ) ;
150
+ return elem . previousElementSibling ;
158
151
} ,
159
152
nextAll : function ( elem ) {
160
- return jQuery . dir ( elem , "nextSibling " ) ;
153
+ return jQuery . dir ( elem , "nextElementSibling " ) ;
161
154
} ,
162
155
prevAll : function ( elem ) {
163
- return jQuery . dir ( elem , "previousSibling " ) ;
156
+ return jQuery . dir ( elem , "previousElementSibling " ) ;
164
157
} ,
165
158
nextUntil : function ( elem , i , until ) {
166
- return jQuery . dir ( elem , "nextSibling " , until ) ;
159
+ return jQuery . dir ( elem , "nextElementSibling " , until ) ;
167
160
} ,
168
161
prevUntil : function ( elem , i , until ) {
169
- return jQuery . dir ( elem , "previousSibling " , until ) ;
162
+ return jQuery . dir ( elem , "previousElementSibling " , until ) ;
170
163
} ,
171
164
siblings : function ( elem ) {
172
165
return jQuery . sibling ( ( elem . parentNode || { } ) . firstChild , elem ) ;
173
166
} ,
174
167
children : function ( elem ) {
175
- return jQuery . sibling ( elem . firstChild ) ;
168
+ var children = elem . children ;
169
+
170
+ // documentFragment or document does not have children property
171
+ return children ? jQuery . merge ( [ ] , children ) : jQuery . sibling ( elem . firstChild ) ;
176
172
} ,
177
173
contents : function ( elem ) {
178
174
return jQuery . nodeName ( elem , "iframe" ) ?
@@ -181,23 +177,27 @@ jQuery.each({
181
177
}
182
178
} , function ( name , fn ) {
183
179
jQuery . fn [ name ] = function ( until , selector ) {
184
- var ret = jQuery . map ( this , fn , until ) ;
180
+ var matched = jQuery . map ( this , fn , until ) ;
185
181
186
182
if ( ! runtil . test ( name ) ) {
187
183
selector = until ;
188
184
}
189
185
190
186
if ( selector && typeof selector === "string" ) {
191
- ret = jQuery . filter ( selector , ret ) ;
187
+ matched = jQuery . filter ( selector , matched ) ;
192
188
}
193
189
194
- ret = this . length > 1 && ! guaranteedUnique [ name ] ? jQuery . unique ( ret ) : ret ;
190
+ if ( this . length > 1 ) {
191
+ if ( ! guaranteedUnique [ name ] ) {
192
+ jQuery . unique ( matched ) ;
193
+ }
195
194
196
- if ( this . length > 1 && rparentsprev . test ( name ) ) {
197
- ret = ret . reverse ( ) ;
195
+ if ( rparentsprev . test ( name ) ) {
196
+ matched . reverse ( ) ;
197
+ }
198
198
}
199
199
200
- return this . pushStack ( ret ) ;
200
+ return this . pushStack ( matched ) ;
201
201
} ;
202
202
} ) ;
203
203
@@ -208,33 +208,32 @@ jQuery.extend({
208
208
}
209
209
210
210
return elems . length === 1 ?
211
- jQuery . find . matchesSelector ( elems [ 0 ] , expr ) ? [ elems [ 0 ] ] : [ ] :
212
- jQuery . find . matches ( expr , elems ) ;
211
+ jQuery . find . matchesSelector ( elems [ 0 ] , expr ) ? [ elems [ 0 ] ] : [ ] :
212
+ jQuery . find . matches ( expr , elems ) ;
213
213
} ,
214
214
215
215
dir : function ( elem , dir , until ) {
216
- var matched = [ ] ,
217
- cur = elem [ dir ] ;
216
+ var cur = elem [ dir ] ,
217
+ matched = [ ] ;
218
218
219
- while ( cur && cur . nodeType !== 9 && ( until === undefined || cur . nodeType !== 1 || ! jQuery ( cur ) . is ( until ) ) ) {
220
- if ( cur . nodeType === 1 ) {
221
- matched . push ( cur ) ;
222
- }
223
- cur = cur [ dir ] ;
219
+ while ( cur && ( ! until || ! jQuery ( cur ) . is ( until ) ) ) {
220
+ matched . push ( cur ) ;
221
+ cur = cur [ dir ] ;
224
222
}
223
+
225
224
return matched ;
226
225
} ,
227
226
228
227
sibling : function ( n , elem ) {
229
- var r = [ ] ;
228
+ var matched = [ ] ;
230
229
231
230
for ( ; n ; n = n . nextSibling ) {
232
231
if ( n . nodeType === 1 && n !== elem ) {
233
- r . push ( n ) ;
232
+ matched . push ( n ) ;
234
233
}
235
234
}
236
235
237
- return r ;
236
+ return matched ;
238
237
}
239
238
} ) ;
240
239
@@ -245,30 +244,34 @@ function winnow( elements, qualifier, keep ) {
245
244
// Set to 0 to skip string check
246
245
qualifier = qualifier || 0 ;
247
246
247
+ var filtered ;
248
+
248
249
if ( jQuery . isFunction ( qualifier ) ) {
249
250
return jQuery . grep ( elements , function ( elem , i ) {
250
251
var retVal = ! ! qualifier . call ( elem , i , elem ) ;
251
252
return retVal === keep ;
252
253
} ) ;
254
+ }
253
255
254
- } else if ( qualifier . nodeType ) {
256
+ if ( qualifier . nodeType ) {
255
257
return jQuery . grep ( elements , function ( elem ) {
256
258
return ( elem === qualifier ) === keep ;
257
259
} ) ;
260
+ }
258
261
259
- } else if ( typeof qualifier === "string" ) {
260
- var filtered = jQuery . grep ( elements , function ( elem ) {
262
+ if ( typeof qualifier === "string" ) {
263
+ filtered = jQuery . grep ( elements , function ( elem ) {
261
264
return elem . nodeType === 1 ;
262
265
} ) ;
263
266
264
267
if ( isSimple . test ( qualifier ) ) {
265
- return jQuery . filter ( qualifier , filtered , ! keep ) ;
266
- } else {
267
- qualifier = jQuery . filter ( qualifier , filtered ) ;
268
+ return jQuery . filter ( qualifier , filtered , ! keep ) ;
268
269
}
270
+
271
+ qualifier = jQuery . filter ( qualifier , filtered ) ;
269
272
}
270
273
271
274
return jQuery . grep ( elements , function ( elem ) {
272
- return ( jQuery . inArray ( elem , qualifier ) >= 0 ) === keep ;
275
+ return ( core_indexOf . call ( qualifier , elem ) >= 0 ) === keep ;
273
276
} ) ;
274
277
}
0 commit comments