在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 相关文章推荐
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
JavaScript结合HTML DOM实现联动菜单
Apr 05 Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
Vue学习之组件用法实例详解
Jan 06 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
深入理解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数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
vue实例的选项总结
2020/06/09 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Django的Modelforms用法简介
2019/07/27 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
初三政治教学反思
2014/01/30 职场文书
小学班主任评语
2014/12/29 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
Python中异常处理用法
2021/11/27 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android