JavaScript實現(xiàn)格式化字符串函數(shù)String.format
在js開發(fā)中,我們可能會遇到這樣一個問題
當(dāng)需要通過js動態(tài)插入html標(biāo)簽的時候
特別是當(dāng)遇到大量的變量拼接、引號層層嵌套的情況,會出現(xiàn)轉(zhuǎn)義字符問題,經(jīng)常出錯
我們來看個例子
<!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>
運行直接報錯
接下來把轉(zhuǎn)義字符\"改成\'試下
運行之后,發(fā)現(xiàn)仍然無法正常顯示
這樣的代碼不光看起來雜亂無章、難以維護,關(guān)鍵是很容易出錯
接下來我們開始封裝格式化字符串方法
String.js
(function () { /// <summary> /// 引號轉(zhuǎn)義符號 /// </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); } })();
通過占位符傳遞變量值,用%替代了引號轉(zhuǎn)義符,代碼簡潔了很多,也非常方便維護,出錯的機率也小了很多
<!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>
看下測試效果
測試結(jié)果正確,并且點擊事件中也正確接收到了參數(shù)值
案例下載地址:http://xiazai.jb51.net/201612/yuanma/StringFormat_jb51.rar
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- Java字符串格式化功能?String.format用法詳解
- Java String.format()的用法
- Java之String.format()方法案例講解
- 快速入門介紹Java中強大的String.format()
- Java中String.format的使用方法總結(jié)
- JAVA字符串格式化-String.format()的使用
- String.Format大全(C# Java)
- C#中string.format用法詳解
- javascript模擬實現(xiàn)C# String.format函數(shù)功能代碼
- js中的string.format函數(shù)代碼
- javascript下string.format函數(shù)補充
- javascript下利用arguments實現(xiàn)string.format函數(shù)
- asp.net String.format中大括號的加入方法
- 為javascript添加String.Format方法
相關(guān)文章
D3.js的基礎(chǔ)部分之?dāng)?shù)組的處理數(shù)組的排序和求值(v3版本)
這篇文章主要介紹了D3.js的基礎(chǔ)部分之?dāng)?shù)組的處理數(shù)組的排序和求值(v3版本) ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05如何將JavaScript將數(shù)組轉(zhuǎn)為樹形結(jié)構(gòu)
我們經(jīng)常會碰到樹形數(shù)據(jù)結(jié)構(gòu),比方組織層級、省市縣或者者動植物分類等等數(shù)據(jù),那么如何將JavaScript將數(shù)組轉(zhuǎn)為樹形結(jié)構(gòu),本文就詳細(xì)的來了解一下2021-06-06JS實現(xiàn)網(wǎng)絡(luò)請求的三種方式梳理
本文主要為大家介紹了基于 XMLHttpRequest、Promise、async/await 等三種異步網(wǎng)絡(luò)請求的寫法,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-03-03javascript創(chuàng)建元素和刪除元素實例小結(jié)
這篇文章主要介紹了javascript創(chuàng)建元素和刪除元素,結(jié)合實例形式總結(jié)分析了javascript針對頁面元素的動態(tài)創(chuàng)建、刪除及子元素操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-06-06ES6中Set和Map數(shù)據(jù)結(jié)構(gòu)的簡單講解
大家心里是否產(chǎn)生過這樣的疑問,JS中既然已經(jīng)有對象這種數(shù)據(jù)結(jié)構(gòu),我們?yōu)槭裁催€要再單獨去使用Set或者Map呢?下面這篇文章主要給大家介紹了關(guān)于ES6中Set和Map數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2022-08-08談?wù)勎覍avaScript中typeof和instanceof的深入理解
這次主要說說javascript的類型判斷函數(shù)typeof和判斷構(gòu)造函數(shù)原型instanceof的用法和注意的地方,對本文感興趣的朋友一起看看吧2015-12-12