jQuery.parseHTML() 方法
jQuery $.parseHTML() 函数用于将 HTML 字符串解析为对应的 DOM 节点数组
语法
$.parseHTML( htmlString [, context ] [, keepScripts ] )
参数
参数 | 描述 |
---|---|
htmlString | String类型 需要解析并转为DOM节点数组的HTML字符串 |
context | Element类型 指定在哪个Document中创建元素,默认为当前文档的 document |
keepScripts | Boolean类型 指定传入的HTML字符串中是否包含脚本,默认为false |
说明
-
该函数将使用原生的DOM元素创建函数把 HTML 字符串转换为一个 DOM 元素的集合,我们可以将这些 DOM 元素插入到文档中
-
如果没有指定 context 参数,或该参数为 null 或 undefined,则默认为当前 document
如果创建的 DOM 元素用于另一个文档,例如 iframe,则应该指定该 iframe的 document 对象
安全考虑
因为大多数 jQuery API 都允许 HTML 字符串在 HTML 中包含运行脚本
jQuery.parseHTML() 不会运行解析的 HTML 中的脚本,除非我们明确将参数 keepScripts 指定为 true
不过,大多数环境仍然可以间接地执行脚本,例如:通过 <img onerror=""/>
属性
调用者应该避免这样做,并清理或转义诸如 URL、cookie 等来源的任何不受信任的输入,从而预防出现这种情况
出于未来的兼容性考虑,当参数keepScripts被省略或为false时,调用者应该不依赖任何运行脚本内容的能力
范例
$(function () { var $log = $( "#log" ), str = "hello, <b>my name is</b> jQuery.", html = $.parseHTML( str ), nodeNames = []; //添加已解析的HTML $log.append( html ); //集合已解析HTML的节点名称 $.each( html, function( i, el ) { nodeNames[i] = "<li>" + el.nodeName + "</li>"; }); // 插入节点名 $log.append( "<h3>Node Names:</h3>" ); $( "<ol></ol>" ) .append( nodeNames.join( "" ) ) .appendTo( $log ); })