1 <!DOCTYPE html> 2 <html> 3 <head> 4 <META http-equiv=Content-Type content="text/html; charset=utf-8"> 5 <title>關于HTML編碼 - by 楊元</title> 6 </head> 7 <body> 8 <h1>關于HTML編碼</h1> 9 <!--基礎html框架-->10 <table>11 <thead>12 <tr>13 <th>姓名</th>14 <th>性別</th>15 <th>年齡</th>16 <th>個人主頁</th>17 </tr>18 </thead>19 <tbody id="tableList">20 21 </tbody>22 </table>23 24 <!--插件引用-->25 <script type="text/javascript" src="script/jquery.js"></script>26 <script type="text/Javascript" src="script/handlebars-1.0.0.beta.6.js"></script>27 28 <!--Handlebars.js模版-->29 <!--Handlebars.js模版放在script標簽中,保留了html原有層次結構,模版中要寫一些操作語句-->30 <!--id可以用來唯一確定一個模版,type是模版固定的寫法-->31 <script id="table-template" type="text/x-handlebars-template">32 {{#each student}}33 <tr>34 <td>{{name}}</td>35 <td>{{sex}}</td>36 <td>{{age}}</td>37 {{#compare age 20}}38 <td>{{homePage}}</td>39 {{else}}40 <td>{{{homePage}}}</td>41 {{/compare}}42 </tr> 43 {{/each}}44 </script>45 46 <!--進行數據處理、html構造-->47 <script type="text/javascript">48 $(document).ready(function() {49 //模擬的json對象50 var data = {51 "student": [52 {53 "name": "張三",54 "sex": "0",55 "age": 18,56 "homePage":"<a href='javascript:void(0);'>張三的個人主頁</a>"57 },58 {59 "name": "李四",60 "sex": "0",61 "age": 22,62 "homePage":"<a href='javascript:void(0);'>李四的個人主頁</a>"63 },64 {65 "name": "妞妞",66 "sex": "1",67 "age": 19,68 "homePage":"<a href='javascript:void(0);'>妞妞的個人主頁</a>"69 }70 ]71 };72 73 //注冊一個Handlebars模版,通過id找到某一個模版,獲取模版的html框架74 //$("#table-template").html()是jquery的語法,不懂的童鞋請惡補。。。75 var myTemplate = Handlebars.compile($("#table-template").html());76 77 //注冊一個比較數字大小的Helper,有options參數,塊級Helper78 Handlebars.registerHelper("compare",function(v1,v2,options){79 //判斷v1是否比v2大80 if(v1>v2){81 //繼續執行82 return options.fn(this);83 }else{84 //執行else部分85 return options.inverse(this);86 }87 });88 89 //將json對象用剛剛注冊的Handlebars模版封裝,得到最終的html,插入到基礎table中。90 $('#tableList').html(myTemplate(data));91 });92 </script>93 </body>94 </html>
通過{{}}取出來的內容,都會經過編碼,也就是說,如果取出的內容中包含html標簽,會被轉碼成純文本,不會被當成html解析,實際上就是做了類似這樣的操作:把<用<替代。
這樣做是很好的,既可以顯示html代碼,又可以避免xss注入。這個功能在做代碼展示的時候是非常有用的。
但是有時候我們可能需要解析html,不要轉碼,很簡單,把{{}}換成{{{}}}就可以啦。
本例中,年齡大于20的童鞋個人主頁被編碼,直接展示出來;而年齡小于20的童鞋,個人主頁被當成html解析,顯示的是一個超鏈接。
作者:楊元歡迎任何形式的轉載,但請務必注明出處。
新聞熱點
疑難解答