在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 01 Javascript
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
基于jquery的监控数据是否发生改变
Apr 11 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
微信小程序实现打卡签到页面
Sep 21 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python实现的金山快盘的签到程序
2013/01/17 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python中实现字符串翻转的方法
2018/07/11 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
linux面试题参考答案(9)
2016/01/29 面试题
小学语文教学反思
2014/02/10 职场文书
工程资料员岗位职责
2014/03/10 职场文书
通报表扬范文
2015/01/17 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
gateway网关接口请求的校验方式
2021/07/15 Java/Android