jQuery中的parseHTML模块主要是用来创建DOM元素的,类似于createElement。

1
2
3
4
5
6
// data: html字符串
// context (可选): 如果定义, 将会在这个上下文中将创建的HTML片段, 默认是document
// keepScripts (可选): 一个布尔值,表明是否在传递的HTML字符串中包含脚本。
jQuery.parseHTML = function( data, context, keepScripts ) {
// ...... 实现省略
}

parseHTML是针对createElement的扩展。比如parseHTML('<div></div>')document.createElement('div')效果是一样的。

parseHTML实现也是采用createElement来实现的,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
jQuery.parseHTML = function( data, context, keepScripts ) {
//如果data为空 或者不是string 返回null
if ( !data || typeof data !== "string" ) {
return null;
}
// 如果context是boolean keepScripts就用context替代
if ( typeof context === "boolean" ) {
keepScripts = context;
context = false;
}
//没有设置context context就为document
context = context || document;
//["<div>", "div", index: 0, input: "<div>"]
var parsed = rsingleTag.exec( data ),
scripts = !keepScripts && [];
// 如果parsed不为空 在context创建节点
if ( parsed ) {
return [ context.createElement( parsed[1] ) ];
}
// 使用文档操作创建
parsed = jQuery.buildFragment( [ data ], context, scripts );
if ( scripts && scripts.length ) {
jQuery( scripts ).remove();
}
return jQuery.merge( [], parsed.childNodes );
};