jquery-hftable.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * hftable 0.1
  3. * Copyright (c) 2014 赵俊夫 http://zjfhw.iteye.com
  4. * Date: 2014-02-23
  5. 主要功能:将普通的Table的表头/表尾固定
  6. 特点:
  7. 1.该版本约定将表格第一行作为表头,所以不需要特别设置<thead>之类的标签标识表头,普通结构的table即可。
  8. 2.同上,如果设置了表尾固定,则约定表格的最后一行为表尾。
  9. 入参:
  10. options{
  11. fixHeader:true/fales //是否固定表头,默认true
  12. fixFooter:true/false //是否固定表尾,默认false
  13. width //Table的宽度
  14. height //Table的高度
  15. }
  16. */
  17. (function($) {
  18. $.fn.createhftable = function(options) {
  19. var defaultOptions = {
  20. fixHeader:true,
  21. fixFooter:false,
  22. width:'100%',
  23. height:'400px'
  24. };
  25. if(!options){
  26. options = {};
  27. }
  28. $.extend(defaultOptions,options);
  29. //1.将原始table分离
  30. var $trHead = this.find("tr:first").clone();
  31. var $trFoot = this.find("tr:last").clone();
  32. var $tableHead = this.clone();
  33. var $tableFoot = this.clone();
  34. this.find("tr:first").remove();
  35. if(defaultOptions.fixFooter){
  36. this.find("tr:last").remove();
  37. }
  38. //2.创建一个Div包裹Table,设置成可滚动
  39. var tableId = this.attr("id");
  40. var divId = tableId+"scrolldiv";
  41. var headId = tableId+"scrolldivHead";
  42. var footId = tableId+"scrolldivFoot";
  43. $tableHead.attr("id",headId);
  44. $tableFoot.attr("id",footId);
  45. var divStyle = "overflow: auto;width:"+defaultOptions.width+";height:"+defaultOptions.height;
  46. var divtp = "<div id='"+divId+"' style=\""+divStyle+"\">"+getOuterHtml(this)+"</div>";
  47. this.before(divtp);
  48. this.remove();
  49. //3.将Table的表头/表尾复制成单独的Table放在hftable的上下方
  50. //3.1 添加表头
  51. $tableHead.html('');
  52. $tableHead.append(getOuterHtml($trHead));
  53. $("#"+divId).before(getOuterHtml($tableHead));
  54. fix(headId,tableId);
  55. //3.2 添加表尾
  56. if(defaultOptions.fixFooter){
  57. $tableFoot.html('');
  58. $tableFoot.append(getOuterHtml($trFoot));
  59. $("#"+divId).after(getOuterHtml($tableFoot));
  60. fix(footId,tableId);
  61. }
  62. //4.绑定滚动事件
  63. bindScrollEvent(headId,footId,divId,defaultOptions.fixFooter);
  64. };
  65. function getOuterHtml(obj) {
  66. var box = $('<div></div>');
  67. box.append(obj.clone());
  68. return box.html();
  69. }
  70. function fix(headid,contentid){
  71. for(var i=0;i<=$('#'+contentid+' tr:last').find('td:last').index();i++){
  72. $('#'+headid+' td').eq(i).css('width',
  73. $('#'+contentid+' tr:last').find('td').eq(i).width());
  74. }
  75. $('#'+headid).css('width',$('#'+contentid+' tr:last').width());
  76. }
  77. function bindScrollEvent(headId,footId,divId,fixFooter){
  78. $('#'+divId).scroll(function(){
  79. $('#'+headId).css('margin-left',-($('#'+divId).scrollLeft()));
  80. if(fixFooter){
  81. $('#'+footId).css('margin-left',-($('#'+divId).scrollLeft()));
  82. }
  83. });
  84. }
  85. })(jQuery);