在寫Web程序時,想簡單處理會使用JS模板,經常使用的是Jquery的jquery.tmpl.js插件。整個插件仍是比較好用的,後續有機會結合實際應用案例,分享下應用方法。javascript
本次文章想分享的一點是其中的一個很小的細節:支持行標index。html
具體的使用場景是:經過表格展現數據,同時第一列爲序號,會存在刪除、新增行的按鈕操做。java
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="../_common/jquery-1.12.2.min.js"></script> 5 <script src="../_common/jquery.tmpl.min.js"></script> 6 </head> 7 <body> 8 <table id="list"> 9 <tr class="tableHead"> 10 <td>序號</td> 11 <td>名稱</td> 12 <td>代碼</td> 13 <td>類型</td> 14 </tr> 15 </table> 16 <script id="tmp" type="text/x-jquery-tmpl"> 17 <tr> 18 <td>${Number(id)+1}</td> 19 <td>${name}</td> 20 <td>${code}</td> 21 <td>${type}</td> 22 </tr> 23 </script> 24 <script type="text/javascript"> 25 $(document).ready(function () { 26 var list = [ 27 { id:"0", name: "javascript", code: "001", type: "web" }, 28 { id:"1", name: "asp.net", code: "004", type: "server" }, 29 { id:"2", name: "sql", code: "005", type: "db" } 30 ]; 31 $("#tmp").tmpl(list).appendTo("#list"); 32 }); 33 </script> 34 </body> 35 </html>
如上,若是要實現行序號,則須要在數據集合中加入一個屬性返回行號,這樣就會致使很是麻煩。當存在刪除或新增行時,若要刷新展現,還須要刷新數據的id屬性,不方便操做。其實若是可以利用table的rowindex或者其餘的方式,能夠較好的利用dom屬性或數組index來處理,那就會方便不少了。jquery
基於此思路,咱們改造jquery.tmpl.js的tmpl函數。以下圖,對於未壓縮的插件源碼,處理以下:web
爲了不數據集合中存在index對象,故特地加了一個$以做區分,使用時用$index屬性進行取值便可。sql
如果須要改造jquery.tmpl.min.js,因爲作了代碼混淆,搜索map函數,第一個調用的地方按照如上邏輯調整便可。數組
調整後的調用方式:app
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="../_common/jquery-1.12.2.min.js"></script> 5 <script src="../_common/jquery.tmpl.min.js"></script> 6 </head> 7 <body> 8 <table id="list"> 9 <tr class="tableHead"> 10 <td>序號</td> 11 <td>名稱</td> 12 <td>代碼</td> 13 <td>類型</td> 14 </tr> 15 </table> 16 <script id="tmp" type="text/x-jquery-tmpl"> 17 <tr> 18 <td>${$index+1}</td> 19 <td>${name}</td> 20 <td>${code}</td> 21 <td>${type}</td> 22 </tr> 23 </script> 24 <script type="text/javascript"> 25 $(document).ready(function () { 26 var list = [ 27 { name: "javascript", code: "001", type: "web" }, 28 { name: "asp.net", code: "004", type: "server" }, 29 { name: "sql", code: "005", type: "db" } 30 ]; 31 $("#tmp").tmpl(list).appendTo("#list"); 32 }); 33 </script> 34 </body> 35 </html>
如上爲新的調用方式,是否是方便了不少。asp.net