javascript拼接html代碼


 轉自開源中國社區:http://www.oschina.net/code/snippet_94055_21640
經常做jsp開發的朋友可能遇到一個情況,顯示列表數據不是table,而是div或者其他很多標簽做的一種更漂亮的樣式列表。如果采用ajax更新列表數據,可能有些朋友采用“html代碼拼接”的方式,比如:"<a>"+json.name+"</a>"這樣的方法。
下面我提供一個思路,可以不需要拼接html代碼,並且適用任何復雜的列表。

代碼說明:
1. 適用於ajax獲取數據然后需要通過拼接html代碼的方式實現數據列表展現的需求/功能
2. html模板最好有一個父元素, 因為最后clone的模板都是插入在父元素內部后面
3. 代碼中最關鍵的部分當然是js的實現. 理解js部分主要是clone、each、append、replace這幾個方法的理解和應用

// 希望對大家有用

 

[1].[代碼] html代碼示例 跳至 [1] [2]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
< div class = "modal-body" style = "height: 300px; overflow: auto" >
     < ul class = "thumbnails" >
         <!--
         注意id='template'
         這里定義一個數據模板. id為template
         然后里面需要顯示值的地方用#key#的形式占位, 可以出現多次. key與json返回的對象的name保持一致.
         剛開始編寫模板的時候, 可以不設置 display: none; 方便查看模板樣式.
         測試的時候, 設置目標 display: none;
         -->
         < li class = "span1" id = 'template' style = 'display: none;' >
             < a href = "javascript:;" class = "thumbnail" >
                 < label for = "#id#" >
                     < img src = "${pageContext.request.contextPath }/resource/image/#logo#" alt = "" >
                 </ label >
             </ a >
             < p style = "text-align: center" >< input id = "#id#" type = "checkbox" value = "#id#" style = "opacity: 1;" >#name#</ p >
         </ li >
         <!--
         數據為空的時候顯示的提醒信息. 不是必須.
         需要的朋友主要是了解下javascript部分關鍵代碼實現思路就可以了,
         了解后隨便怎么寫都OK...
         -->
         < li class = "span1" id = 'template_nodata' style = 'display: none;' >
             吖! 人呢? (沒有可供選擇的用戶)
         </ li >
     </ ul >
</ div >
 

[2].[代碼] js實現模板復制和數據填充 跳至 [1] [2]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function demo() {
     $.post( '${pageContext.request.contextPath}/demo/getData.htm' , function (data) {
         if (data.list.length > 0) {
             var hasHandler = typeof (valHandler) == 'function' ; // 是否有定義val額外處理的函數
             var template = $( '#template' );
             
             // 循環json格式對象
             $.each(data.list, function (i, obj) {
                 // 克隆當前數據模板, 清除id, 設置顯示
                 // jQuery也有removeAttr()方法可以清除id, 看個人習慣
                 // 之所以清除id, 是為了保持id的唯一性, 並且模板id不能重復
                 // clone(true)是把事件一起clone
                 var temp = template.clone( true ).attr( 'id' , '' ).show();
                 var html = temp.html(), regx;       // 取模板里的html字符串; 定義正則變量
               
                 // obj為json中的對象;    key對應json對象的屬性, val就是json的val值
                 $.each(obj, function (key, val) {
                     if (hasHandler) {
                         // 對'指定屬性'的value進行特殊處理, 如value為空需指定默認值
                         val = valHandler(key, val);
                     }
                     
                     // 動態創建正則
                     // 例如:#name#/g 替換所有 #name#
                     regx = new RegExp( '#' +key+ '#' , 'g' );
                     html = html.replace(regx, val || '' );   // 將占位符替換成實際值, 如果 val為null, 將原有的#name#占位符替換成''
                 });
                 
                 // temp.html(html)是把html字符有替換回去
                 // 然后追加到目標的父容器的后面
                 template.parent().append(temp.html(html));
             }); // $.each
         }
         else {
             $( '#template_nodata' ).show();
         }
     }); // ajax獲取數據
}
 
// valHandler必須定義,
// 如果不定義, 上述代碼var hasHandler = typeof(valHandler) == 'function';部分會報錯為定義對象
// 該函數的意義是針對需要二次處理的字段進行處理
function valHandler(key, val) {
     if (key == 'logo' && !val) {
         // 如果logo為空, 路徑改成默認logo路徑
         val = 'defaultLogo.png' ;
     }
     return val;
}


免責聲明!

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



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