JQuery动态行列table

  项目使用JQuery,有个数据回显页面,客户要求提供一个下拉列表,通过选择下拉列表中的数据来定制数据表格的列。用户选择一个,表格就会相应的加一列来显示用户的选择。用Jquery做了简单的实现,初次接触JQuery(以前用EXTJS),还没有从EXT那种企业级的js框架中缓过劲儿来。做这个例子过程中记录了一些笔记,便于以后翻查:

  • 1. 选择器返回的jquery对象不需要判空,而且支持链式操作,这是和extjs很大的区别,对习惯了java编程的人说稍稍有点不习惯
    2. JQuery对DOM节点的控制特别灵活。虽然EXTJS也可以实现类似的动作但是它毕竟是面向组件的,这种外科手术似的小操作不是EXT的本功。
    3. JQuery的浏览器兼容性比EXT要好的多,这是EXT自己的软肋。这个例子碰到一个兼容性的问题(.css('display', 'block')在IE下正常但是在FF下所有的列都挤到第一列中了,可以google一下'CSS display', 改为使用JQuery的show方法

Java代码 复制代码  收藏代码
  1. <!DOCTYPE html>   
  2. <html>   
  3. <head>   
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />   
  5. <style>   
  6. body {   
  7.     margin: 50px 100px;   
  8. }   
  9. #dataTable tr td{   
  10.     width: 100px;   
  11.     display: none;   
  12. }   
  13. .theader {   
  14.     background:#A4D4FC;   
  15. }   
  16.   
  17. </style>   
  18. <script src="jquery-1.8.1.js"></script>   
  19. <script type="text/javascript">   
  20. $(function(){   
  21. //init page   
  22. var columns = ['Column A''Column B''Column C''Column D''Column E''Column F''Column G'];   
  23. for(var i=0; i < columns.length; i++){   
  24.     //generate dropdown list   
  25.     $('#ColSelect').append('<option>' + columns[i] + '</option>');   
  26.     //generate header   
  27.     $('#dataTable tr[class="theader"]').append('<td id="head_' + (i+1) +'"></td>');   
  28.     //generate table body   
  29.     $('#dataTable tr[class="tbody"]').append('<td name="col_' + (i+1) + '"></td>');   
  30. }   
  31. //JSON format data   
  32. var data = {   
  33.     'Column A': ['A1''A2''A3''A4''A5'],   
  34.     'Column B': ['B1''B2''B3''B4''B5'],   
  35.     'Column C': ['C1''C2''C3''C4''C5'],   
  36.     'Column D': ['D1''D2''D3''D4''D5'],   
  37.     'Column E': ['E1''E2''E3''E4''E5'],   
  38.     'Column F': ['F1''F2''F3''F4''F5'],   
  39.     'Column G': ['G1''G2''G3''G4''G5']   
  40. };   
  41. //Generate tr as per data size   
  42. for(var i=0; ++i < data['Column A'].length; ){   
  43.     $('#dataTable').append($('#dataTable tr:last').clone());    
  44. }   
  45. //after tr generate, add stripe style on tr   
  46. $("#dataTable tr:even[class!='theader']").css("background","#EFEFEF");   
  47. //register event on dropdown list.   
  48. var colIndex = 0;   
  49. $('#ColSelect').change(function(e){   
  50.     $("#ColSelect option:selected").each(function () {   
  51.         var val = $(this).val();   
  52.         if(val){   
  53.             colIndex++;   
  54.             $(this).remove();//remove selected from dropdown   
  55.             $('#head_'+colIndex).text(val).show();//css('display', 'block');//display header, Note:css('display', 'block') have compatibility issue on FF   
  56.             var idx = 0;   
  57.             $('td[name="col_'+colIndex+'"]').each(function(){   
  58.                 $(this).text(data[val][idx++]).show();//loop to put value in each tr for one column   
  59.             });   
  60.         }   
  61.       });   
  62. });   
  63.        
  64. });   
  65. </script>   
  66. <title>JQuery</title>   
  67. </head>   
  68. <body>   
  69.     <select id="ColSelect">   
  70.         <option value="">--Select--</option>   
  71.     </select>   
  72.     <table id="dataTable">   
  73.         <tr class="theader"></tr>   
  74.         <tr class="tbody"></tr>   
  75.     </table>   
  76. </body>   
  77. </html>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值