在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 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
JQuery 引发两次$(document.ready)事件
Jan 15 Javascript
tangram框架响应式加载图片方法
Nov 21 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
jQuery+Ajax实现限制查询间隔的方法
Jun 07 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
基于ssm框架实现layui分页效果
Jul 27 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
Aug 27 Javascript
Vue数据双向绑定原理实例解析
May 15 Javascript
Vue实现背景更换颜色操作
Jul 17 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新手上路(八)
2006/10/09 PHP
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
php图像验证码生成代码
2017/06/08 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python程序设计入门(3)数组的使用
2014/06/16 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
Linux如何为某个操作添加别名
2015/02/05 面试题
J2EE包括哪些技术
2016/11/25 面试题
个人授权委托书格式
2014/08/30 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
实习计划书范文
2015/01/16 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL