JavaScript實(shí)現(xiàn)格式化字符串函數(shù)String.format
在js開(kāi)發(fā)中,我們可能會(huì)遇到這樣一個(gè)問(wèn)題
當(dāng)需要通過(guò)js動(dòng)態(tài)插入html標(biāo)簽的時(shí)候
特別是當(dāng)遇到大量的變量拼接、引號(hào)層層嵌套的情況,會(huì)出現(xiàn)轉(zhuǎn)義字符問(wèn)題,經(jīng)常出錯(cuò)
我們來(lái)看個(gè)例子
<!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>
運(yùn)行直接報(bào)錯(cuò)

接下來(lái)把轉(zhuǎn)義字符\"改成\'試下
運(yùn)行之后,發(fā)現(xiàn)仍然無(wú)法正常顯示
這樣的代碼不光看起來(lái)雜亂無(wú)章、難以維護(hù),關(guān)鍵是很容易出錯(cuò)
接下來(lái)我們開(kāi)始封裝格式化字符串方法
String.js
(function () {
/// <summary>
/// 引號(hào)轉(zhuǎn)義符號(hào)
/// </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);
}
})();
通過(guò)占位符傳遞變量值,用%替代了引號(hào)轉(zhuǎn)義符,代碼簡(jiǎn)潔了很多,也非常方便維護(hù),出錯(cuò)的機(jī)率也小了很多
<!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>
看下測(cè)試效果

測(cè)試結(jié)果正確,并且點(diǎn)擊事件中也正確接收到了參數(shù)值
案例下載地址:http://xiazai.jb51.net/201612/yuanma/StringFormat_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- Java字符串格式化功能?String.format用法詳解
- Java String.format()的用法
- Java之String.format()方法案例講解
- 快速入門(mén)介紹Java中強(qiáng)大的String.format()
- Java中String.format的使用方法總結(jié)
- JAVA字符串格式化-String.format()的使用
- String.Format大全(C# Java)
- C#中string.format用法詳解
- javascript模擬實(shí)現(xiàn)C# String.format函數(shù)功能代碼
- js中的string.format函數(shù)代碼
- javascript下string.format函數(shù)補(bǔ)充
- javascript下利用arguments實(shí)現(xiàn)string.format函數(shù)
- asp.net String.format中大括號(hào)的加入方法
- 為javascript添加String.Format方法
相關(guān)文章
D3.js的基礎(chǔ)部分之?dāng)?shù)組的處理數(shù)組的排序和求值(v3版本)
這篇文章主要介紹了D3.js的基礎(chǔ)部分之?dāng)?shù)組的處理數(shù)組的排序和求值(v3版本) ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
如何將JavaScript將數(shù)組轉(zhuǎn)為樹(shù)形結(jié)構(gòu)
我們經(jīng)常會(huì)碰到樹(shù)形數(shù)據(jù)結(jié)構(gòu),比方組織層級(jí)、省市縣或者者動(dòng)植物分類(lèi)等等數(shù)據(jù),那么如何將JavaScript將數(shù)組轉(zhuǎn)為樹(shù)形結(jié)構(gòu),本文就詳細(xì)的來(lái)了解一下2021-06-06
淺析js實(shí)現(xiàn)網(wǎng)頁(yè)截圖的兩種方式
這篇文章主要介紹了淺析js實(shí)現(xiàn)網(wǎng)頁(yè)截圖的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
JS實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的三種方式梳理
本文主要為大家介紹了基于 XMLHttpRequest、Promise、async/await 等三種異步網(wǎng)絡(luò)請(qǐng)求的寫(xiě)法,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-03-03
javascript創(chuàng)建元素和刪除元素實(shí)例小結(jié)
這篇文章主要介紹了javascript創(chuàng)建元素和刪除元素,結(jié)合實(shí)例形式總結(jié)分析了javascript針對(duì)頁(yè)面元素的動(dòng)態(tài)創(chuàng)建、刪除及子元素操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06
ES6中Set和Map數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單講解
大家心里是否產(chǎn)生過(guò)這樣的疑問(wèn),JS中既然已經(jīng)有對(duì)象這種數(shù)據(jù)結(jié)構(gòu),我們?yōu)槭裁催€要再單獨(dú)去使用Set或者M(jìn)ap呢?下面這篇文章主要給大家介紹了關(guān)于ES6中Set和Map數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2022-08-08
用Webpack構(gòu)建Vue項(xiàng)目的實(shí)踐
這篇文章主要介紹了用Webpack構(gòu)建Vue項(xiàng)目的實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
談?wù)勎覍?duì)JavaScript中typeof和instanceof的深入理解
這次主要說(shuō)說(shuō)javascript的類(lèi)型判斷函數(shù)typeof和判斷構(gòu)造函數(shù)原型instanceof的用法和注意的地方,對(duì)本文感興趣的朋友一起看看吧2015-12-12

