js方法參數中含有單引號雙引號的處理


最近在做項目時,遇到一個問題。當在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, "\\\'");

            //也可以使用&acute;
            HaveSpecialval = HaveSpecialval.replace(/\'/g, "&acute;");
            return HaveSpecialval;
        }
復制代碼

如果參數中含有半角雙引號時,也可以使用轉義的方法處理,但是不能使用下面這種方式

//轉換半角雙引號
            HaveSpecialval = HaveSpecialval.replace(/\'/g, "\\\"");

 \"是javascript的轉義格式,html語言無法對\"進行解析,此時要使用html的轉義字符&&quot;或者&#34;

            HaveSpecialval = HaveSpecialval.replace(/\"/g, "&quot;");

            HaveSpecialval = HaveSpecialval.replace(/\"/g, "&#34;");

html轉義字符要以&開頭 ;結尾 中間不能有空格;

 

http://www.cnblogs.com/shanaihuan/archive/2012/11/03/2753009.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM