jQuery.parseHTML() 函数详解

 更新时间:2017年01月09日 21:31:37   投稿:mdxy-dxy  
这篇文章主要介绍了jQuery.parseHTML() 函数,用于将HTML字符串解析为对应的DOM节点数组,需要的朋友可以参考下

定义和用法

$.parseHTML() 函数用于将HTML字符串解析为对应的DOM节点数组。

注意:

1. 该函数将使用原生的DOM元素创建函数把HTML字符串转换为一个DOM元素的集合,你可以将这些DOM元素插入到文档中。

2. 如果没有指定context参数,或该参数为null或undefined,则默认为当前document。如果创建的DOM元素用于另一个文档,例如iframe,则应该指定该iframe的document对象。

安全考虑:大多数jQuery API都允许HTML字符串在HTML中包含运行脚本。 jQuery.parseHTML()不会运行解析的HTML中的脚本,除非你明确将参数keepScripts指定为true。 不过,大多数环境仍然可以间接地执行脚本,例如:通过属性。调用者应该避免 这样做,并清理或转义诸如URL、cookie等来源的任何不受信任的输入,从而预防出现这种情况。 出于未来的兼容性考虑,当参数keepScripts被省略或为false时,调用者应该不依赖任何运行脚 本内容的能力。

语法

$.parseHTML( htmlString [, context ] [, keepScripts ] )

参数 描述
htmlString String类型 需要解析并转为DOM节点数组的HTML字符串
context Element类型 指定在哪个Document中创建元素,默认为当前文档的document
keepScripts Boolean类型 指定传入的HTML字符串中是否包含脚本,默认为false

实例
使用一个HTML字符串创建一个数组的Dom节点,并将它插入一个div

<div id="log">
  <h3>Content:</h3>
</div>
<script>
$(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 );
})
</script>

示例&说明

以下是与jQuery.parseHTML()函数相关的jQuery示例代码,以演示jQuery.parseHTML()函数的具体用法:

// "<\/script>"必须通过\将/转义,否则JS会认为已经到了脚本结束的位置
var html = 'Hello,<b>CodePlayer</b><script type="text/javascript">alert("执行脚本代码");<\/script>';


var doms = $.parseHTML( html );
// 不会执行脚本代码
$("#n1").append(doms);

alert("分割线");

doms = $.parseHTML( html, true );
// 会执行脚本代码
$("#n1").append(doms);

返回值

jQuery.parseHTML()函数的返回值为Array类型,返回解析指定HTML字符串后的DOM节点数组。

jQuery.parseHTML使用原生方法将字符串转换为一个DOM节点的集合,然后可以插入到文档。 这些方法渲染所有尾随或前导文本(即使只是空格)。 为了防止尾随/前导空格被转换为文本节点,你可以通过将HTML字符串传递给jQuery .trim。

默认情况下,如果没有指定或给定null 或 undefined,context是当前的document。如果HTML被用在另一个document中,比如一个iframe,该frame的文件可以使用。

在3.0中,这种默认行为已经被改变。如果没有指定context,或者给定值为null 或 undefined,那么将使用一个新的document。这有可能会提高安全性,因为当HTML解析时,内嵌的事件将不会执行。一旦解析的HTML注入到文档中它会执行,但是这给工具一个机会,遍历创建DOM和删除任何东西被视为不安全。这种改进并不适用于jQuery.parseHTML的内部使用,因为他们通常传递给当前文档。因此,如类似$( "#log" ).append( $( htmlString ) )的声明,仍然受制于恶意代码注入。

Security Considerations(安全注意事项)

大多数的jQuery的API接受的HTML字符串将运行所包含在HTML中的脚本。jQuery.parseHTML不运行HTML中解析出来的脚本,除非 keepScripts参数为true。然而,它仍然是可能在大多数环境中间接地执行脚本,例如通过<img onerror>属性。调用者应该意识到这一点,并通过清理或避免任何不可信来源的输入,如URL或cookies,来防止它。为了未来的兼容性,当keepScripts为不确定的或false时,调用者不应该依赖于这个能力来运行任何脚本内容。

相关文章

  • jQuery中的AjaxSubmit使用讲解

    jQuery中的AjaxSubmit使用讲解

    最近使用ajaxform有点频繁,今天小编抽时间给大家记录下有关jquery中的ajaxSubmit使用讲解的知识,非常不错,感兴趣的朋友参考下吧
    2016-09-09
  • jQuery实现Select左右复制移动内容

    jQuery实现Select左右复制移动内容

    这篇文章主要介绍了基于jQuery实现Select左右复制移动内容的实现方法,代码非常简单,具有参考借鉴价值,需要的朋友参考下
    2016-08-08
  • jquery操作cookie插件分享

    jquery操作cookie插件分享

    在网页客户端,我们经常会遇到读取或者设置cookie的情况,如果用纯生的js我们可能会遇到一些兼容性带来的麻烦,这里给大家介绍一个比较实用jquery操作cookie的插件
    2014-01-01
  • JQUERY 设置SELECT选中项代码

    JQUERY 设置SELECT选中项代码

    本篇文章主要是对JQUERY 设置SELECT选中项的代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • jquery实现LED广告牌旋转系统图片切换效果代码分享

    jquery实现LED广告牌旋转系统图片切换效果代码分享

    这篇文章主要介绍了jquery实现LED广告牌旋转系统图片切换效果类似路边场景,很实用的代码,推荐给大家,有需要的小伙伴可以参考下。
    2015-08-08
  • 通过点击jqgrid表格弹出需要的表格数据

    通过点击jqgrid表格弹出需要的表格数据

    在众多的表格插件中,jqgrid的特点是非常鲜明的,所以jqgrid表格插件用处非常广泛,本篇文章给大家介绍通过点击jqgrid表格弹出需要的表格数据,需要的朋友参考下
    2015-12-12
  • Jquery获取radio选中值实例总结

    Jquery获取radio选中值实例总结

    在本篇文章里小编给大家分享了关于Jquery获取radio选中值实例总结内容,有兴趣的朋友们可以学习下。
    2019-01-01
  • jquery isEmptyObject判断是否为空对象的函数

    jquery isEmptyObject判断是否为空对象的函数

    jQuery 判断一个对象是否为空是使用for name in obj 来遍历对象中的属性名.
    2011-02-02
  • jQuery实现html table行Tr的复制、删除、计算功能

    jQuery实现html table行Tr的复制、删除、计算功能

    这篇文章主要介绍了jQuery实现html table行Tr的复制、删除、计算功能,涉及jQuery针对table表格的常见复制、添加、删除与计算行数等简单操作技巧,需要的朋友可以参考下
    2017-07-07
  • JQuery AJAX操作代码

    JQuery AJAX操作代码

    jQuery底层AJAX实现,其返回其创建的XMLHttpRequest对象,大多数情况下无需直接操作该函数,除非需要操作不常用的选项,以获得更多的灵活性,这篇文章给大家介绍JQuery AJAX操作代码,感兴趣的朋友一起看看吧
    2022-12-12

最新评论