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插件jbox使用iframe关闭问题
Feb 09 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
Nov 19 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
详解vue-cli开发环境跨域问题解决方案
Jun 06 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
基于Vue的延迟加载插件vue-view-lazy
May 21 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
Mar 13 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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
phpwind中的数据库操作类
2007/01/02 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
微信自定义分享php代码分析
2016/11/24 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
PHP7新增函数
2021/03/09 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
scrapy爬虫完整实例
2018/01/25 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
numpy.random模块用法总结
2019/05/27 Python
python列表的逆序遍历实现
2020/04/20 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
C语言编程题
2015/03/09 面试题
Java面试笔试题大全
2016/11/23 面试题
Unix/Linux开发面试题
2016/08/16 面试题
英语专业推荐信
2013/11/16 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
元旦主持词开场白
2015/05/29 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL