在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 相关文章推荐
JavaScript浏览器选项卡效果
Aug 25 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
原生node.js案例--前后台交互
Feb 20 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
Vue中通过vue-router实现命名视图的问题
Apr 23 Javascript
JavaScript 实现下雪特效的示例代码
Sep 09 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
php中mysql操作buffer用法详解
2015/03/19 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
jsTree使用记录实例
2016/12/01 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
python中的句柄操作的方法示例
2019/06/20 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
生日寿宴答谢词
2014/01/19 职场文书
合作经营协议书范本
2014/04/17 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
企业管理不到位检讨书
2019/06/27 职场文书