為了更方便實現字符串的格式化,這里仿照其他語言寫了format這個函數,如下:
1 //格式化字符串,這個方法網上有很多例子 不懂自行百度吧 2 String.prototype.format = function (param) { 3 var reg = /{([^{}]+)}/gm; 4 return this.replace(reg, function (match, name) { 5 return param[name]; 6 }); 7 };
接下來到重點,上代碼:
1 /** 2 * 清除並加載數組到表格中 3 * @param table_id 表格ID 需要帶# 如"#myTable" 4 * @param tr_template 帶參數的行模板 5 * @param arr_data 模板對應的數據 6 * @param arr_params_name 模板對應的參數 需要和arr_data的長度一致 7 */ 8 Utils.loadListToTable = function (table_id, tr_template, arr_data, arr_params_name) { 9 var table = $(table_id); 10 var paramsLen = arr_params_name.length;//獲取參數的長度 11 //移除已經存在的行 12 $(table_id+" tr:not(:first)").remove(); 13 14 if(arr_data.length<1){ 15 //因為本人采用Ajax加載數據,所以為了避免沒有效果,這里做了個判斷, 16 //如果傳入的數據長度小於1的話,直接在表格提示沒有數據 17 var non='<tr rowspan="3"class="text-center"><td colspan="'+paramsLen+'" style="color: #9e9e9e57;">什么都沒有</td></tr>' 18 $(table_id+" tbody:last").append(non); 19 } 20 21 for (var j = 0; j < arr_data.length; j++) { 22 23 var formatParams = {}; 24 //構造參數 25 for (var i = 0; i < paramsLen; i++) { 26 formatParams[arr_params_name[i]] = arr_data[j][arr_params_name[i]]; 27 } 28 29 var row=tr_template.format(formatParams); 30 $(table_id+" tbody:last").append(row); 31 } 32 };
使用例子:
頁面代碼(只列出關鍵代碼):
1 <div> 2 3 <table id="myTable"> 4 5 <thead> 6 <tr> 7 <th>姓名</th> 8 <th>密碼</th> 9 </tr> 10 </thead> 11 <tbody> 12 13 </tbody> 14 15 </table> 16 17 </div>
初始界面:
數據准備:
//生成一組數據 var testData=[{name:'wpr',pwd:'123'},{name:'wrp',pwd:'456'},{name:'rwp',pwd:'789'},{name:'wrp',pwd:'000'},{name:'prw',pwd:'666'}]; //行的模板 這里的目標表格列數為兩列 var row_templ = '<tr><td>{name}</td><td>{pwd}</td></tr>'; //構造參數列表,方便格式化 var paramsName=['name','pwd']; //加載數據至表格 Utils.loadListToTable('#myTable',row_templ ,testData,paramsName);
加載結果:
所有js代碼:
1 $(function(){ 2 3 function Utils(){} 4 5 Utils.loadListToTable = function (table_id, tr_template, arr_data, arr_params_name) { 6 var table = $(table_id); 7 var paramsLen = arr_params_name.length;//獲取參數的長度 8 //移除已經存在的行 9 $(table_id+" tr:not(:first)").remove(); 10 11 if(arr_data.length<1){ 12 var non='<tr rowspan="3"class="text-center"><td colspan="'+paramsLen+'" style="color: #9e9e9e57;">什么都沒有</td></tr>' 13 $(table_id+" tbody:last").append(non); 14 } 15 16 for (var j = 0; j < arr_data.length; j++) { 17 18 var formatParams = {}; 19 //構造參數 20 for (var i = 0; i < paramsLen; i++) { 21 formatParams[arr_params_name[i]] = arr_data[j][arr_params_name[i]]; 22 } 23 24 var row=tr_template.format(formatParams); 25 $(table_id+" tbody:last").append(row); 26 } 27 28 29 }; 30 31 //格式化字符串,這個方法網上有很多例子 不懂自行百度吧 32 String.prototype.format = function (param) { 33 var reg = /{([^{}]+)}/gm; 34 return this.replace(reg, function (match, name) { 35 return param[name]; 36 }); 37 }; 38 39 40 //生成一組數據 41 var testData=[{name:'wpr',pwd:'123'},{name:'wrp',pwd:'456'},{name:'rwp',pwd:'789'},{name:'wrp',pwd:'000'},{name:'prw',pwd:'666'}]; 42 //行的模板 這里的目標表格列數為兩列 43 var row_templ = '<tr><td>{name}</td><td>{pwd}</td></tr>'; 44 45 //構造參數列表,方便格式化 46 var paramsName=['name','pwd']; 47 //>------需要注意 行模板{}中的值和paramsName里面的名需要對應,其實可以進一步封裝------< 48 49 //加載數據至表格 50 Utils.loadListToTable('#myTable',row_templ ,testData,paramsName); 51 52 })