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 相关文章推荐
URL地址中的#符号使用说明
Feb 12 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
js从外部获取图片的实现方法
Aug 05 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
vue项目打包后打开页面空白解决办法
Jun 29 Javascript
Vue脚手架的简单使用实例
Jul 10 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
Sep 04 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
关于文本留言本的分页代码
2006/10/09 PHP
php 禁止页面缓存输出
2009/01/07 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
实例讲解PHP表单处理
2019/02/15 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
从0开始学Vue
2016/10/27 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
2018/09/16 Javascript
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
考博自荐信
2013/10/25 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers