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 构造函数强制调用经验总结
Dec 02 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
复制js对象方法(详解)
Jul 08 Javascript
Jquery动态更改一张位图的src与Attr的使用
Jul 31 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
webpack4 + react 搭建多页面应用示例
Aug 03 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
php中explode与split的区别介绍
2012/10/03 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php单一接口的实现方法
2015/06/20 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
Node.js简单入门前传
2017/08/21 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python搜索指定目录的方法
2015/04/29 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
一些Solaris面试题
2015/12/22 面试题
运动员口号
2014/06/09 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书