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 有用的脚本函数
May 07 Javascript
jquery 使用点滴函数代码
May 20 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
jQuery $命名冲突解决方案汇总
Nov 13 Javascript
AngularJS教程之简单应用程序示例
Aug 16 Javascript
移动端js图片查看器
Nov 17 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
Vue项目中设置背景图片方法
Feb 21 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
Vue使用axios引起的后台session不同操作
Aug 14 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
实用函数7
2007/11/08 PHP
浅谈PHP的反射API
2017/02/26 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python生成随机密码的方法
2017/06/16 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
python批量修改图片大小的方法
2018/07/24 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
一份报关员的职业规划范文
2014/01/08 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
综治宣传月活动总结
2014/04/28 职场文书
学习雷锋标语
2014/06/25 职场文书
最美乡村教师观后感
2015/06/11 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL