@@ -108,6 +108,94 @@ function fixInput( src, dest ) {
108
108
}
109
109
}
110
110
111
+ function domManip ( collection , args , callback , ignored ) {
112
+
113
+ // Flatten any nested arrays
114
+ args = concat . apply ( [ ] , args ) ;
115
+
116
+ var fragment , first , scripts , hasScripts , node , doc ,
117
+ i = 0 ,
118
+ l = collection . length ,
119
+ iNoClone = l - 1 ,
120
+ value = args [ 0 ] ,
121
+ isFunction = jQuery . isFunction ( value ) ;
122
+
123
+ // We can't cloneNode fragments that contain checked, in WebKit
124
+ if ( isFunction ||
125
+ ( l > 1 && typeof value === "string" &&
126
+ ! support . checkClone && rchecked . test ( value ) ) ) {
127
+ return collection . each ( function ( index ) {
128
+ var self = collection . eq ( index ) ;
129
+ if ( isFunction ) {
130
+ args [ 0 ] = value . call ( this , index , self . html ( ) ) ;
131
+ }
132
+ domManip ( self , args , callback , ignored ) ;
133
+ } ) ;
134
+ }
135
+
136
+ if ( l ) {
137
+ fragment = buildFragment ( args , collection [ 0 ] . ownerDocument , false , collection , ignored ) ;
138
+ first = fragment . firstChild ;
139
+
140
+ if ( fragment . childNodes . length === 1 ) {
141
+ fragment = first ;
142
+ }
143
+
144
+ // Require either new content or an interest in ignored elements to invoke the callback
145
+ if ( first || ignored ) {
146
+ scripts = jQuery . map ( getAll ( fragment , "script" ) , disableScript ) ;
147
+ hasScripts = scripts . length ;
148
+
149
+ // Use the original fragment for the last item
150
+ // instead of the first because it can end up
151
+ // being emptied incorrectly in certain situations (#8070).
152
+ for ( ; i < l ; i ++ ) {
153
+ node = fragment ;
154
+
155
+ if ( i !== iNoClone ) {
156
+ node = jQuery . clone ( node , true , true ) ;
157
+
158
+ // Keep references to cloned scripts for later restoration
159
+ if ( hasScripts ) {
160
+ // Support: Android<4.1, PhantomJS<2
161
+ // push.apply(_, arraylike) throws on ancient WebKit
162
+ jQuery . merge ( scripts , getAll ( node , "script" ) ) ;
163
+ }
164
+ }
165
+
166
+ callback . call ( collection [ i ] , node , i ) ;
167
+ }
168
+
169
+ if ( hasScripts ) {
170
+ doc = scripts [ scripts . length - 1 ] . ownerDocument ;
171
+
172
+ // Reenable scripts
173
+ jQuery . map ( scripts , restoreScript ) ;
174
+
175
+ // Evaluate executable scripts on first document insertion
176
+ for ( i = 0 ; i < hasScripts ; i ++ ) {
177
+ node = scripts [ i ] ;
178
+ if ( rscriptType . test ( node . type || "" ) &&
179
+ ! dataPriv . access ( node , "globalEval" ) &&
180
+ jQuery . contains ( doc , node ) ) {
181
+
182
+ if ( node . src ) {
183
+ // Optional AJAX dependency, but won't run scripts if not present
184
+ if ( jQuery . _evalUrl ) {
185
+ jQuery . _evalUrl ( node . src ) ;
186
+ }
187
+ } else {
188
+ jQuery . globalEval ( node . textContent . replace ( rcleanScript , "" ) ) ;
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
195
+
196
+ return collection ;
197
+ }
198
+
111
199
jQuery . extend ( {
112
200
htmlPrefilter : function ( html ) {
113
201
return html . replace ( rxhtmlTag , "<$1></$2>" ) ;
@@ -193,7 +281,7 @@ jQuery.fn.extend({
193
281
} ,
194
282
195
283
append : function ( ) {
196
- return this . domManip ( arguments , function ( elem ) {
284
+ return domManip ( this , arguments , function ( elem ) {
197
285
if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) {
198
286
var target = manipulationTarget ( this , elem ) ;
199
287
target . appendChild ( elem ) ;
@@ -202,7 +290,7 @@ jQuery.fn.extend({
202
290
} ,
203
291
204
292
prepend : function ( ) {
205
- return this . domManip ( arguments , function ( elem ) {
293
+ return domManip ( this , arguments , function ( elem ) {
206
294
if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) {
207
295
var target = manipulationTarget ( this , elem ) ;
208
296
target . insertBefore ( elem , target . firstChild ) ;
@@ -211,15 +299,15 @@ jQuery.fn.extend({
211
299
} ,
212
300
213
301
before : function ( ) {
214
- return this . domManip ( arguments , function ( elem ) {
302
+ return domManip ( this , arguments , function ( elem ) {
215
303
if ( this . parentNode ) {
216
304
this . parentNode . insertBefore ( elem , this ) ;
217
305
}
218
306
} ) ;
219
307
} ,
220
308
221
309
after : function ( ) {
222
- return this . domManip ( arguments , function ( elem ) {
310
+ return domManip ( this , arguments , function ( elem ) {
223
311
if ( this . parentNode ) {
224
312
this . parentNode . insertBefore ( elem , this . nextSibling ) ;
225
313
}
@@ -317,7 +405,7 @@ jQuery.fn.extend({
317
405
var ignored = [ ] ;
318
406
319
407
// Make the changes, replacing each non-ignored context element with the new content
320
- return this . domManip ( arguments , function ( elem ) {
408
+ return domManip ( this , arguments , function ( elem ) {
321
409
var parent = this . parentNode ;
322
410
323
411
if ( jQuery . inArray ( this , ignored ) < 0 ) {
@@ -333,95 +421,6 @@ jQuery.fn.extend({
333
421
334
422
detach : function ( selector ) {
335
423
return this . remove ( selector , true ) ;
336
- } ,
337
-
338
- domManip : function ( args , callback , ignored ) {
339
-
340
- // Flatten any nested arrays
341
- args = concat . apply ( [ ] , args ) ;
342
-
343
- var fragment , first , scripts , hasScripts , node , doc ,
344
- i = 0 ,
345
- l = this . length ,
346
- set = this ,
347
- iNoClone = l - 1 ,
348
- value = args [ 0 ] ,
349
- isFunction = jQuery . isFunction ( value ) ;
350
-
351
- // We can't cloneNode fragments that contain checked, in WebKit
352
- if ( isFunction ||
353
- ( l > 1 && typeof value === "string" &&
354
- ! support . checkClone && rchecked . test ( value ) ) ) {
355
- return this . each ( function ( index ) {
356
- var self = set . eq ( index ) ;
357
- if ( isFunction ) {
358
- args [ 0 ] = value . call ( this , index , self . html ( ) ) ;
359
- }
360
- self . domManip ( args , callback , ignored ) ;
361
- } ) ;
362
- }
363
-
364
- if ( l ) {
365
- fragment = buildFragment ( args , this [ 0 ] . ownerDocument , false , this , ignored ) ;
366
- first = fragment . firstChild ;
367
-
368
- if ( fragment . childNodes . length === 1 ) {
369
- fragment = first ;
370
- }
371
-
372
- // Require either new content or an interest in ignored elements to invoke the callback
373
- if ( first || ignored ) {
374
- scripts = jQuery . map ( getAll ( fragment , "script" ) , disableScript ) ;
375
- hasScripts = scripts . length ;
376
-
377
- // Use the original fragment for the last item
378
- // instead of the first because it can end up
379
- // being emptied incorrectly in certain situations (#8070).
380
- for ( ; i < l ; i ++ ) {
381
- node = fragment ;
382
-
383
- if ( i !== iNoClone ) {
384
- node = jQuery . clone ( node , true , true ) ;
385
-
386
- // Keep references to cloned scripts for later restoration
387
- if ( hasScripts ) {
388
- // Support: Android<4.1, PhantomJS<2
389
- // push.apply(_, arraylike) throws on ancient WebKit
390
- jQuery . merge ( scripts , getAll ( node , "script" ) ) ;
391
- }
392
- }
393
-
394
- callback . call ( this [ i ] , node , i ) ;
395
- }
396
-
397
- if ( hasScripts ) {
398
- doc = scripts [ scripts . length - 1 ] . ownerDocument ;
399
-
400
- // Reenable scripts
401
- jQuery . map ( scripts , restoreScript ) ;
402
-
403
- // Evaluate executable scripts on first document insertion
404
- for ( i = 0 ; i < hasScripts ; i ++ ) {
405
- node = scripts [ i ] ;
406
- if ( rscriptType . test ( node . type || "" ) &&
407
- ! dataPriv . access ( node , "globalEval" ) &&
408
- jQuery . contains ( doc , node ) ) {
409
-
410
- if ( node . src ) {
411
- // Optional AJAX dependency, but won't run scripts if not present
412
- if ( jQuery . _evalUrl ) {
413
- jQuery . _evalUrl ( node . src ) ;
414
- }
415
- } else {
416
- jQuery . globalEval ( node . textContent . replace ( rcleanScript , "" ) ) ;
417
- }
418
- }
419
- }
420
- }
421
- }
422
- }
423
-
424
- return this ;
425
424
}
426
425
} ) ;
427
426
0 commit comments