jQuery.parseHTML() 函数详解


Posted in Javascript onJanuary 09, 2017

定义和用法

$.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时,调用者不应该依赖于这个能力来运行任何脚本内容。

Javascript 相关文章推荐
用javascript获取地址栏参数
Dec 22 Javascript
jQuery 使用个人心得
Feb 26 Javascript
基于jquery的一个图片hover的插件
Apr 24 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
详解React中setState回调函数
Jun 14 Javascript
angularjs结合html5实现拖拽功能
Jun 25 Javascript
[jQuery] 事件和动画详解
Mar 05 jQuery
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 Javascript
微信小程序 用户数据解密详细介绍
Jan 09 #Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 #Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 #Javascript
Bootstrap实现渐变顶部固定自适应导航栏
Aug 27 #Javascript
微信小程序 实战程序简易新闻的制作
Jan 09 #Javascript
jquery实现多次上传同一张图片
Jan 09 #Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 #Javascript
You might like
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
python实现简易学生信息管理系统
2020/04/05 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
小学教师岗位职责
2013/11/25 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
工程采购员岗位职责
2014/03/09 职场文书
药剂专业自荐书
2014/06/20 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
小学记事作文之200字
2019/08/06 职场文书