js實現html模版,幾句代碼的事


  最近工作上有個項目遇到一個問題,就是頁面的內容都是從后台給的接口中讀取的,在js代碼中就將html代碼與讀取的內容拼接,然后插到html中,如下:

  

這種方法也常見,但架不住多呀,頁面上所有的內容都是這樣的話,那js里面的html代碼就不是一般的多了,不僅破壞了頁面邏輯,也不方便維護。那么這么多的內容需要填充到頁面中,用什么辦法呢,對,完全可以學習后台的程序那樣,例如:{{voild.filed1}} ,{vo:field.body/},{$v[title]}等等多種形式的,無一不是“模版”,那么我們也可以用js來完成這樣的實現。

  從網上搜索代碼,不是看不懂,就是需要引入一個模版的js,難道就沒有我想要的,既簡單又能看的懂,拿過來就能用的,那么答案是肯定的。

  

 

先看看某些人的代碼:

1     String.prototype.temp = function(obj) {
2         return this.replace(/\$\w+\$/gi, function(matchs) {
3         var returns = obj[matchs.replace(/\$/g, "")];
4             return (returns + "") == "undefined" ? "" : returns;
5         });
6     }

原來是把html內需要添加字段的地方用特殊的符號($)包起來,然后對應json數據中對應的屬性,取其值,然后拼接字符串,再插入到頁面中。大概就這樣了,可是現在需求變了,需要取json數據中某一屬性值的屬性值,也是就是取某一屬性的子集,那么上述的方法就不夠用了,只有再改變。

 1     String.prototype.temp = function(reg, obj) {
 2         return this.replace(reg, function(matchs) {
 3             var returns = '',
 4             getStr = matchs.replace(/\$/g, ""),
 5             subArr = getStr.split('.');
 6             len = subArr.length;
 7             if(len == 1){ 
 8                 returns = obj[getStr];
 9             }else if(len > 1){ 
10                 returns = obj[subArr[0]];
11                 for(var i=1; i<len; i++){
12                     returns = returns[subArr[i]];
13                 }
14             }
15             return (returns + "") == "undefined"? "": returns;
16         });
17     };
View Code

 

例子中是用$($name$)把屬性名包起來,這個可以根據個人愛好,我就是喜歡錢,尤其是美元的,哈哈,所以就用$,也可以用別的符號,但注意在代碼中修改相應內容。

同樣,如果還有下一子集的需求,同樣也可以通過修改代碼,比如修改正則,修改判斷截取字符長短的代碼。

在上述代碼中根據正則的判斷,可以查詢多級的子集,但一般用到的也就1-2層。

哇,終於完成了,不着急,最后需要加入調用方法,並將返回值插入到頁面中,才算大功告成,不羅嗦了,直接代碼貼之。。。

1     domRander = function(tpl, ele, reg){ //tpl是調用的模版,ele是需要插入代碼的地方,reg當然是正則了
2         var showTpl = tpl.html(),
3         showHtml = '';
4         for(var i=0,len = JSON.length,jsonList=null; i<len; i++){
5             jsonList = JSON[i] || {};
6             showHtml += showTpl.temp(reg, jsonList);
7         }
8         $('tbody',ele).html(showHtml);
9     };

這次總算是完成了,歡迎拍磚,如果需要查看實例代碼,那就來這里下載吧  demo地址:https://github.com/wyh909/js-workdemo/tree/js-demo/html-tpl-js

 

 


免責聲明!

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



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