1. 程式人生 > 實用技巧 >HTML的元素嵌入data,如何解碼資料

HTML的元素嵌入data,如何解碼資料

在html中,往往會直接嵌入資料到元素的屬性中,在使用的時候直接將這些屬性解析成對應的資料型別,供後面使用。例如:

<table class="xxxx" id="123" data-toggle="datagrid" data-url="{{$.BaseUrl}}{{$index}}" data-options={{MapToStr .Option}} data-width="100%" class="table table-bordered"></table>
//在需要用的地方[一般在元件中使用],獲取相關屬性
<script type="text/javascript">
    var option=$("#123").data()
    //假設url引數可以是string,也可以是一個數組
    var urlPara=option.url;
    try{
        urlPara=JSON.parse(option.url)  //容易報錯
    }catch(e){
        console.log(option.url+"----err----"+e)
    }
    if(urlPara instanceof Array){
           //按陣列處理 
    }else{pre
          //按string處理
    }
</script>>

問題:
當嵌入的資料為陣列型別的時候,如"[%22http://www.w3school.com.cn/My%20first/%22%20%22%http://www.w3school.com.cn/My first/"]"這樣解析就會報錯,報錯內容為:

    bjui-all.js:20776 error:!!!SyntaxError: Unexpected token % in JSON at position 1

原因:
因為這個字串中含有html編碼“%22”等,導致解析錯誤;所以只需要將這些字元解碼,然後再重新解析,即可得到正確的資料結構了
方案:
使用umescapse,decodeURI,decodeURIComponent等函式解碼,在解析字串到正確的資料結構。

	urlPara=JSON.parse(decodeURI(option.url))   

相關知識點回顧
1、知識連結

2、快速回顧

函式 描述
decodeURI() 解碼某個編碼的 URI。
decodeURIComponent() 解碼一個編碼的 URI 元件。
encodeURI() 把字串編碼為 URI。
encodeURIComponent() 把字串編碼為 URI 元件。
escape() 對字串進行編碼。
eval() 計算 JavaScript 字串,並把它作為指令碼程式碼來執行。
getClass() 返回一個 JavaObject 的 JavaClass。
isFinite() 檢查某個值是否為有窮大的數。
isNaN() 檢查某個值是否是數字。
Number() 把物件的值轉換為數字。
parseFloat() 解析一個字串並返回一個浮點數。
parseInt() 解析一個字串並返回一個整數。
String() 把物件的值轉換為字串。
unescape() 對由 escape 編碼的字串進行解碼

3、拓展:字串轉換成其他資料結構
參考BJUI框架的程式碼,將字串轉換成其他資料型別,轉換成物件:

    toObj: function() {
            var obj = null
            
            try {
                obj = (new Function('return '+ this))()
            } catch (e) {
                obj = this
                BJUI.debug('String toObj:Parse "String" to "Object" error! Your str is: '+ this)
            }
            return obj
        }