關於js模板的創建、使用,以及{{}}的簡單實現


在js里面,經常需要使用js往頁面中插入html內容。給script標簽設置type="text/template"屬性,標簽里的內容不會被執行,也不會顯示在頁面上,但是可以在另外一個script里面通過獲取插入到頁面上。這樣可以把大段的html和js進行分離(摘自 https://blog.csdn.net/appke846/article/details/80066681)。

 

以下是只通過JavaScript來實現的方式。

 

body內的元素:

 1 <div id="div" style="background:green;"></div> 

script標簽的模板:

模板1:

1 <script type="text/template" id="div1">
2   <span>這是一個模板</span>
3 </script>

模板2:

1 <script type="text/template" id="div2">
2     <div>數據:{{data}}</div>
3     <div>年齡:{{age}}</div>
4     <div>姓名:{{name}}</div>
5 </script>

JavaScript代碼:

1 var div = document.querySelector('#div');
2 var div1 = document.getElementById('div1');
3 var div2 = document.getElementById('div2');

 

對於模板1,可以通過 1 div.innerHTML = div1.innerHTML; 來實現,即將div1內的元素都放入div內(目前未想到其他實現方式)。

實現效果:

 

對於模板2,當需要傳入數據時,比如data數據: 1 var data = { data: "123", name: "csdn", age: "xxoo" }; 

這時可以通過正則表達式、replace來實現:

 1 div.innerHTML = div2.innerHTML.replace(/\{\{([\s\S]+?)\}\}/g, function($0, $1) { return data[$1] || ''; }); 

實現效果:

 

為了方便,也可以將其寫成一個函數:

 1 /**
 2 * 模板替換
 3 * @param {string} dom 
 4 * @param {json} data 
 5 */
 6 function template(dom, data) {
 7     // /s任何空白字符,包括空格、制表符、換頁符等 <=> [ \f\n\r\t\v]
 8     // /S任何非空白字符 <=> [^ \f\n\r\t\v]
12     // 在+/?/*/{min, max}的后面再加上一個?可以開啟懶惰模式,正則引擎盡可能少的重復匹配字符
13     var replaceDom = dom.replace(/\{\{([\s\S]+?)\}\}/g, function($0, $1) {
14         return data[$1] || '';
15     });
16     return replaceDom;
17 }

 


免責聲明!

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



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