基于jQuery的固定表格头部的代码(IE6,7,8测试通过)


Posted in Javascript onMay 18, 2010

段时间做项目时候由于需要显示一个列表,但是由于数据太多在滚动的时候表头必须冻结住,所以就写了下面这个脚本(曾经在网上也找过相应的脚本,但是不怎么理想所以就自己写了,但是目前由于项目仅仅用到了表头的冻结,而不需要指定列冻结所以目前只能算个不完整的脚本,不过一般的仅仅需要表头冻结就可以使用了),现在先看看截图:

基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
这样实现了表头的冻结,下面表体内容可以自由滚动
看下代码:
//为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 < tableCloneCols.size(); 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()); 
}

以上就是完整代码,现在看下如何使用:
只需在页面中加入以下脚本
<script type="text/javascript"> 
jQuery(function() { 
jQuery.fn.CloneTableHeader("tab1", "div1"); 
}); 
</script>

这样就可以了,传入表和表所在的DIV的ID就OK了,必须注意的是:要冻结的表头必须放入到thead中,否则无法实现冻结。
以上代码在IE6,7,8测试通过,FF和chrome会出现表头的宽度不准确的问题。
具体代码打包下载:点我下载
PS:大家如果觉得好帮忙点下推荐,谢谢大家了!
作者:kyo-yo
出处:http://kyo-yo.cnblogs.com
Javascript 相关文章推荐
用 JavaScript 迁移目录
Dec 18 Javascript
jQuery DIV弹出效果实现代码
Jul 03 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
JavaScript中windows.open()、windows.close()方法详解
Jul 28 Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
vue生成token保存在客户端localStorage中的方法
Oct 25 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
微信小程序修改数组长度的问题的解决
Dec 17 Javascript
js实现上传按钮并显示缩略图小轮子
May 04 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 Javascript
Javascript中的变量使用说明
May 18 #Javascript
Javascript实现的鼠标经过时播放声音
May 18 #Javascript
JavaScript 继承机制的实现(待续)
May 18 #Javascript
JavaScript 面向对象编程(2) 定义类
May 18 #Javascript
JavaScript 面向对象编程(1) 基础
May 18 #Javascript
Javascript Object.extend
May 18 #Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 #Javascript
You might like
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
XML的代替者----JSON
2007/07/21 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
Python实现的计算器功能示例
2018/04/26 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
如何写好优秀的创业计划书
2014/01/30 职场文书
学校联谊活动方案
2014/02/15 职场文书
工作证明格式及范本
2014/09/12 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
2016年五一促销广告语
2016/01/28 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android