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 相关文章推荐
JQuery UI皮肤定制
Jul 27 Javascript
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
使用C++为node.js写扩展模块
Apr 22 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 Javascript
Vue-不允许嵌套式的渲染方法
Sep 13 Javascript
在vue中解决提示警告 for循环报错的方法
Sep 28 Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
php的一个登录的类 [推荐]
2007/03/16 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python常用模块用法分析
2014/09/08 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python使用tkinter实现简单计算器
2018/01/30 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
六道php面试题附答案
2014/06/05 面试题
校园联欢晚会主持词
2014/03/17 职场文书
文秘自荐信
2014/06/28 职场文书
小时代观后感
2015/06/10 职场文书
警示教育观后感
2015/06/17 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
MYSQL 运算符总结
2021/11/11 MySQL
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
vue router 动态路由清除方式
2022/05/25 Vue.js