在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>
運行直接報錯
接下來把轉義字符\"改成\'試下
運行之後,發現仍然無法正常顯示
這樣的代碼不光看起來雜亂無章、難以維護,關鍵是很容易出錯
接下來我們開始封裝格式化字符串方法
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>
看下測試效果
測試結果正確,並且點擊事件中也正確接收到了參數值
案例下載地址:http://wd.jb51.net:81//201612/yuanma/StringFormat_jb51.rar
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持!