JavaScript实现格式化字符串函数String.format


Posted in Javascript onDecember 16, 2016

在js开发中,我们可能会遇到这样一个问题

当需要通过js动态插入html标签的时候

特别是当遇到大量的变量拼接、引号层层嵌套的情况,会出现转义字符问题,经常出错

我们来看个例子

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title></title>
 <script>
 window.onload = function () {
 var id = '1';
 var code = 'zhangsan';
 var name = '张三';
 document.getElementById('test').innerHTML = '<a href="#" onclick="buttonClick(\"' + id + '\",\"' + code + '\">' + name + '</a>';
 }
 function buttonClick(id, code) {
 alert(id + '-' + code);
 }
 </script>
</head>
<body>
 <div id="test"></div>
</body>
</html>

运行直接报错

JavaScript实现格式化字符串函数String.format

接下来把转义字符\"改成\'试下

运行之后,发现仍然无法正常显示

这样的代码不光看起来杂乱无章、难以维护,关键是很容易出错

接下来我们开始封装格式化字符串方法

String.js

(function () {
 /// <summary>
 /// 引号转义符号
 /// </summary>
 String.EscapeChar = '\'';
 /// <summary>
 /// 替换所有字符串
 /// </summary>
 /// <param name="searchValue">检索值</param> 
 /// <param name="replaceValue">替换值</param> 
 String.prototype.replaceAll = function (searchValue, replaceValue) {
 var regExp = new RegExp(searchValue, "g");
 return this.replace(regExp, replaceValue);
 }
 /// <summary>
 /// 格式化字符串
 /// </summary>
 String.prototype.format = function () {
 var regexp = /\{(\d+)\}/g;
 var args = arguments;
 var result = this.replace(regexp, function (m, i, o, n) {
 return args[i];
 });
 return result.replaceAll('%', String.EscapeChar);
 }
})();

通过占位符传递变量值,用%替代了引号转义符,代码简洁了很多,也非常方便维护,出错的机率也小了很多

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title></title>
 <script src="String.js"></script>
 <script>
 window.onload = function () {
 var id = '1';
 var code = 'zhangsan';
 var name = '张三';
 document.getElementById('test').innerHTML = '<a href="#" onclick="buttonClick(%{0}%,%{1}%)">{2}</a>'.format(id, code, name);
 }

 function buttonClick(id, code) {
 alert(id + '-' + code);
 }
 </script>
</head>
<body>
 <div id="test"></div>
</body>
</html>

看下测试效果

JavaScript实现格式化字符串函数String.format

测试结果正确,并且点击事件中也正确接收到了参数值

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript TO HTML 转换
Jun 26 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
zTree插件下拉树使用入门教程
Apr 11 Javascript
IE和Firefox之间在JavaScript语法上的差异
Apr 22 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
Apr 20 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
js实现自动锁屏功能
Jun 02 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 #Javascript
JS搜狐面试题分析
Dec 16 #Javascript
JS重载实现方法分析
Dec 16 #Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 #Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 #Javascript
js继承实现方法详解
Dec 16 #Javascript
详解jQuery简单的表格应用
Dec 16 #Javascript
You might like
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
php目录操作实例代码
2014/02/21 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
JSON取值前判断
2014/12/23 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python实现中值滤波去噪方式
2019/12/18 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
python小白切忌乱用表达式
2020/05/29 Python
win10安装python3.6的常见问题
2020/07/01 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
公积金单位接收函
2014/01/11 职场文书
求职信需要的五点内容
2014/02/01 职场文书
班组长安全工作职责
2014/07/15 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
检举信的写法
2019/04/10 职场文书
2019年思想汇报
2019/06/20 职场文书
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers