jQuery.parseHTML( data [, context ] [, keepScripts ] )返回类型:Array
描述:把一个字符串解析为一个DOM节点的数组。
jQuery.parseHTML
使用原生的方法来把字符串转换为一个DOM节点的集合,然后它可以被插入到文档中。这些方法都呈现所有前部或后部的文本(哪怕它仅仅是空白)。若要防止前部和后部的空白被转换为文本节点,你可以让该HTML字符串先通过jQuery.trim()
。
默认情况下,如果没有指定context
,或者把它指定为null
或undefined
,则context
是当前document
。如果HTML需要被用到其它文档中,譬如一个iframe中,就使用此框架的document
。
自从jQuery 3.0以来,此默认行为改变了。如果没有指定context
,或者把它指定为null
或undefined
,就使用一个新的document
。这可能会增加安全性,因为当解析HTML时,内联的事件不会被执行。一旦经解析的HTML被注入到文档,它还是会执行的,但是这使工具有机会去遍历刚创建的DOM,并删除任何不安全的东西。这种改进没有应用于jQuery.parseHTML
的内部使用,因为它们通常传入当前的document
。因此,像$( "#log" ).append( $( htmlString ) )
这样的语句依然受制于恶意代码的注入。
安全考虑
大多数接受HTML字符串的jQuery API,将运行HTML内部的脚本。jQuery.parseHTML
并不运行经解析的HTML内部的脚本,除非keepScripts
明确为true
。然而,在大多数环境中,脚本依然会间接地执行,例如,通过<img onerror>
特性来执行。调用者需要小心这一点,并保持警惕,从源码中清除或转义任何不可信的输入,譬如URL或cookies。为了未来的兼容性,当keepScripts
未指定或指定为false
时,调用者不应该依赖于此能力来运行任何脚本内容。
示例:
创建一个DOM节点的数组,使用HTML字符串,并把它插入到<div>中。
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
30
31
32
33
34
35
36
|
|