annotate default/node_modules/jquery/src/manipulation/buildFragment.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 "../core/toType",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "./var/rtagName",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./var/rscriptType",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "./wrapMap",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "./getAll",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 "./setGlobalEval"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 ], function( jQuery, toType, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 var rhtml = /<|&#?\w+;/;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 function buildFragment( elems, context, scripts, selection, ignored ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 var elem, tmp, tag, wrap, contains, j,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 fragment = context.createDocumentFragment(),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 nodes = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 i = 0,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 l = elems.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 for ( ; i < l; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 elem = elems[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 if ( elem || elem === 0 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 // Add nodes directly
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 if ( toType( elem ) === "object" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 // Support: Android <=4.0 only, PhantomJS 1 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 // push.apply(_, arraylike) throws on ancient WebKit
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 // Convert non-html into a text node
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 } else if ( !rhtml.test( elem ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 nodes.push( context.createTextNode( elem ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 // Convert html into DOM nodes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 // Deserialize a standard representation
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 wrap = wrapMap[ tag ] || wrapMap._default;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 // Descend through wrappers to the right content
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 j = wrap[ 0 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 while ( j-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 tmp = tmp.lastChild;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 // Support: Android <=4.0 only, PhantomJS 1 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 // push.apply(_, arraylike) throws on ancient WebKit
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 jQuery.merge( nodes, tmp.childNodes );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 // Remember the top-level container
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 tmp = fragment.firstChild;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // Ensure the created nodes are orphaned (#12392)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 tmp.textContent = "";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 }
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 // Remove wrapper from fragment
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 fragment.textContent = "";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 i = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 while ( ( elem = nodes[ i++ ] ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 // Skip elements already in the context collection (trac-4087)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 if ( ignored ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 ignored.push( elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 continue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 contains = jQuery.contains( elem.ownerDocument, elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 // Append to fragment
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 tmp = getAll( fragment.appendChild( elem ), "script" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 // Preserve script evaluation history
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 if ( contains ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 setGlobalEval( tmp );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 // Capture executables
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 if ( scripts ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 j = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 while ( ( elem = tmp[ j++ ] ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 if ( rscriptType.test( elem.type || "" ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 scripts.push( elem );
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
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 return fragment;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 return buildFragment;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 } );