最近在做項目時,遇到一個問題。當在js腳本中,拼接生成一個tr,然后添加到一個表格里。
//假定testval是從后台傳過來的數據 var testval = "含有'半角單引號的字符串"; //向表格中添加行數據 function BindTable() { var trval = "<tr><td><a href = '#' onclick =\"BindText('" + testval + "')\">測試</a></td></tr>"; $("#EscapeTable").append(trval); } //向某文本框顯示當前選中行的數據 function BindText(textval) { document.getElementById("Text1").value = textval; }
當執行BindTable(),向表格EscapeTable添加上這一行數據后,單擊超連接"測試"時,沒有執行BindText()方法。
此時感覺很奇怪,為什么單擊"測試",沒有執行BindText()方法。經過調試發現,原來此testval值有特殊的地方,就是含有單引號。於是把單引號去掉后,就可以正常執行BindText()方法。
那么為什么有單引號,就不執行BindText()方法呢?原因是:如果含有半角單引號(全角沒有問題)的字符串,作為BindText()的參數,那么
此行代碼
var trval = "<tr><td><a href = '#' onclick =\"BindText('" + EscapeChar(testval) + "')\">測試</a></td></tr>";
生成的html代碼就是
<tr><td><a href = '#' onclick ="BindText('含有'半角單引號的字符串')">測試</a></td></tr>
此時生成的BindText參數的格式是不正確的。
找到問題就好解決了,於是寫了一個方法,把testval中的單引號,進行轉義
//向表格中添加行數據 function BindTable() { var trval = "<tr><td><a href = '#' onclick =\"BindText('" + EscapeChar(testval) + "')\">測試</a></td></tr>"; $("#EscapeTable").append(trval); } //向某文本框顯示當前選中行的數據 function BindText(textval) { document.getElementById("Text1").value = textval; } //轉換方法 function EscapeChar(HaveSpecialval) { //轉換半角單引號 HaveSpecialval = HaveSpecialval.replace(/\'/g, "\\\'"); //也可以使用´ HaveSpecialval = HaveSpecialval.replace(/\'/g, "´"); return HaveSpecialval; }
如果參數中含有半角雙引號時,也可以使用轉義的方法處理,但是不能使用下面這種方式
//轉換半角雙引號 HaveSpecialval = HaveSpecialval.replace(/\'/g, "\\\"");
\"是javascript的轉義格式,html語言無法對\"進行解析,此時要使用html的轉義字符&"或者"
HaveSpecialval = HaveSpecialval.replace(/\"/g, """); HaveSpecialval = HaveSpecialval.replace(/\"/g, """);
html轉義字符要以&開頭 ;結尾 中間不能有空格;
http://www.cnblogs.com/shanaihuan/archive/2012/11/03/2753009.html