本文实例讲述了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程序设计有所帮助。