写两个表格,一个为表头,另一个为表内容。当表内容数据量比较大时,可以直接在表内容所在的父容器进行滚动。以下为demo代码实现:

<table>    <thead class="header">    <tr><th>姓名</th><th>爱好</th>    </tr>    </thead></table><div id='scrollContainer' style="height:300px;overflow-y:auto;" ><table class="table" cellspacing=0 cellpadding=0 id="mytable"><tbody><tr>    <td>一介码妞</td><td>吉他</td></tr></tbody></table></div><!-- 以下的js只是为了批量生成数据,真正固定表头的方法是fixTabHeader --><script type="text/javascript">$(document).ready(function(){    var row=$("#mytable >tbody>tr:first");    for(i=0;i<80;i++){$('table#mytable > tbody').append(row.clone());     }     $("#mytable").fixedHeader(); });</script>
<script type="text/javascript">function fixTabHeaderScroll(tabid){    var $parent,$head,pTop,oTop,headTop,o;o=$("#"+tabid);oTop=o.height();$parent=o.parent();pTop=$parent.height();$head=$parent.prev();if (pTop <=oTop) {$head.css({width:$head.outerWidth(true)-scrollBarWidth+"px"});}else{$head.css({width:100+"%"});}}</script>
    • 分析 
        这种方式应该是最简单,最明了的实现方式,表头和表内容分家,各管各家,对于表头来说,不管表内容滚或者不滚,它都在哪里不离不弃。但是存在一个问题,在表内容没有滚动时,表头和表身是垂直对齐的,一旦表身出现滚动,新出现的滚动条会占用表身的部分宽度,这就导致表身和表头又不对齐。所以,我们需要在给两个表格应用同样样式的基础上,再用js函数控制两个的宽度,使他们宽度一致,大体思路是获取滚动条的宽,然后设置表头的宽度减去滚动条的宽度。 
      补充介绍Jquery的几个参数: 
      offsetWidth :当前对象的的宽度包括滚动条在内 
      scrollWidth :当前对象的滚动宽度不包括滚动条在内 
      在css的盒子模型中,最内部是content,然后是padding、border、margin 
      width=content 
      innerWidth = width + padding 
      outerWidth = innerWidth + border 
      outerWidth(true) = outerWidth + margin 
      关于outerWidth属性有一个传入参数可以控制它包不包含外部的margin 为true的话包含,默认不包含。 
      注意:要想表格相对于某个父容器做数据滚动,则该父容器必须做如下设置: 
      (1)设置固定高度,不设置高度或者用百分比设置高度,滚动不起作用 
      (2)设置属性overflow-y:auto 
       必选项,否则当表格数据过多时,不会产生滚动条,而是自动延长该父容器的高度 
      (3)设置 position:relative; 
       若不设置,拷贝得来的表头将相对于其设置该属性为该值的父节点(或间接父节点)定位,如果没有,则相对于body

      我的代码:
      <html>
      <head>
      <title>test scrollTop</title>
      <style type="text/css">
      #ttitle{
      width:100px;
      border:1px solid blue;
      height:27px;
      }
      #tcontent{
      width:100px;
      border:1px solid red;
      height:100px;
      overflow:auto;
      }
      tr{
      height:20px;
      }
      table{
      width:100px;
      border:1px solid black;
      }
      </style>
      <script type="text/javascript"> </script>
      </head>
      <body>
      <div id="ttitle">
      <table>
      <th>姓名</th>
      <th>年龄</th>
      </table>
      </div>
      <div id="tcontent">
      <table>
      <tr style="width">
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      <tr>
      <td>guo</td>
      <td>21</td>
      </tr>
      </table>
      </div>
      </body> </html>
05-19 17:41