在JavaScript中对HTML进行反转义详解


Posted in Javascript onMay 18, 2016

在JavaScript中对字符串进行转义和反转义操作,常用的方法莫过于使用encodeURI (decodeURI)、encodeURIComponent (decodeURIComponent)这几个方法,具体使用方法和区别。

但是如何在JavaScript中对HTML进行反转义操作呢?例如下面这段代码:

var jsonData = {
  title: "<%= data.name? data.name : title %>",
  desc: "<%= data.content? data.content : '' %>",
  image: "<%- data.img? data.img : '' %>"
};

其中<%= %>包起来的部分是从服务端返回的值(上例中的代码取自Node.js中Express的ejs模板的代码)。如果从服务端返回的字符串中包含有引号,例如单引号或者双引号,那上述这段JS代码在浏览器中解释的时候会出现错误。如何解决这个问题呢?

其基本思路是通过页面上DOM元素的innerHTML属性将字符串进行HTML反转义,然后将值返回给JavaScript的变量。看下面两段代码:

1. 原生JavaScript写法:

function htmlDecode(input){
 var e = document.createElement('div');
 e.innerHTML = input;
 return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

htmlDecode("<img src='myimage.jpg'>");

2. JQuery写法:

function htmlDecode(value){ 
 return $('<div/>').html(value).text(); 
}

第一个函数使用原生的JavaScript方法创建一个DIV元素,然后将需要反转义的字符串赋值给它的innerHTML属性,最后返回DIV元素的nodeValue属性的值。第二个函数则使用JQuery的方法,其基本原理和第一个函数相同。由于DIV元素都只是在内存中创建,并未append或inert到页面上,所以不会对现有的页面产生任何影响。

最后,我们将一开始的那段代码改成下面的这种方式:

var jsonData = {
  title: $('<div/>').html("<%= data.name? data.name : title %>").text(),
  desc: $('<div/>').html("<%= data.nontent? data.nontent : '' %>").text(),
  image: "<%- data.img? data.img : '' %>"
};

这样便可以在JavaScript中对服务器端返回的字符串进行HTML反转义操作了。

以上这篇在JavaScript中对HTML进行反转义详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
javascript window.opener的用法分析
Apr 07 Javascript
一个基于jquery的文本框记数器
Sep 19 Javascript
SOSO地图JS画出标注和中心点以html形式运行
Aug 09 Javascript
利用javascript判断文件是否存在
Dec 31 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
javascript的BOM汇总
Jul 16 Javascript
js获取Get值的方法
Sep 29 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 Javascript
深入理解JavaScript中的浮点数
May 18 #Javascript
Node.js返回JSONP详解
May 18 #Javascript
noty ? jQuery通知插件全面解析
May 18 #Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 #Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 #Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 #Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 #Javascript
You might like
YB217、YB235、YB400浅听
2021/03/02 无线电
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python处理cookie详解
2014/02/07 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python中redis的安装和使用
2016/12/04 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
UNIX文件系统常用命令
2012/05/25 面试题
高一英语教学反思
2014/01/22 职场文书
建筑工地宣传标语
2014/06/18 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
共青团员自我评价范文
2014/09/14 职场文书
培训后的感想
2015/08/07 职场文书
如何用python插入独创性声明
2021/03/31 Python
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
详解nodejs内置模块
2021/05/06 NodeJs
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers