您好,欢迎访问一九零五行业门户网

jQuery实现冻结表头的方法_jquery

本文实例讲述了jquery实现冻结表头的方法。分享给大家供大家参考。具体如下:
前段时间做项目时候由于需要显示一个列表,但是由于数据太多在滚动的时候表头必须冻结住,所以就写了下面这个脚本(曾经在网上也找过相应的脚本,但是不怎么理想所以就自己写了,但是目前由于项目仅仅用到了表头的冻结,而不需要指定列冻结所以目前只能算个不完整的脚本,不过一般的仅仅需要表头冻结就可以使用了),现在先看看截图:
这样实现了表头的冻结,下面表体内容可以自由滚动
看下代码:
复制代码 代码如下:
//为jquery扩展一个clonetableheader 方法
jquery.fn.clonetableheader = function(tableid, tableparentdivid) {
    //获取冻结表头所在的div,如果div已存在则移除
    var obj = document.getelementbyid(tableheaderdiv + tableid);
    if (obj) {
         jquery(obj).remove();
    }
    var browsername = navigator.appname;//获取浏览器信息,用于后面代码区分浏览器
    var ver = navigator.appversion;
    var browserversion = parsefloat(ver.substring(ver.indexof(msie) + 5, ver.lastindexof(windows)));
    var content = document.getelementbyid(tableparentdivid);
    var scrollwidth = content.offsetwidth - content.clientwidth;
    var tableorg = jquery(# + tableid);//获取表内容
    var table = tableorg.clone();//克隆表内容
    table.attr(id, clonetable);
    //注意:需要将要冻结的表头放入thead中
    var tableheader = jquery(tableorg).find(thead);
    var tableheaderheight = tableheader.height();
    tableheader.hide();
    var colswidths = jquery(tableorg).find(tbody tr:first td).map(function() {
        return jquery(this).width();
    });//动态获取每一列的宽度
    var tableclonecols = jquery(table).find(thead tr:first td)
    if (colswidths.size() > 0) {//根据浏览器为冻结的表头宽度赋值(主要是区分ie8)
        for (i = 0; i             if (i == tableclonecols.size() - 1) {
                if (browserversion == 8.0)
                    tableclonecols.eq(i).width(colswidths[i] + scrollwidth);
                else
                    tableclonecols.eq(i).width(colswidths[i]);
            } else {
                tableclonecols.eq(i).width(colswidths[i]);
            }
        }
    }
    //创建冻结表头的div容器,并设置属性
    var headerdiv = document.createelement(div);
    headerdiv.appendchild(table[0]);
    jquery(headerdiv).css(height, tableheaderheight);
    jquery(headerdiv).css(overflow, hidden);
    jquery(headerdiv).css(z-index, 20);
    jquery(headerdiv).css(width, 100%);
    jquery(headerdiv).attr(id, tableheaderdiv + tableid);
    jquery(headerdiv).insertbefore(tableorg.parent());
}
以上就是完整代码,现在看下如何使用:只需在页面中加入以下脚本
复制代码 代码如下:
这样就可以了,传入表和表所在的div的id就ok了,必须注意的是:要冻结的表头必须放入到thead中,否则无法实现冻结。以上代码在ie6,7,8测试通过,ff和chrome会出现表头的宽度不准确的问题。
完整实例代码点击此处本站下载。
希望本文所述对大家的jquery程序设计有所帮助。
其它类似信息

推荐信息