基于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 相关文章推荐
一页面多XMLHttpRequest对象
Jan 22 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
Apr 24 Javascript
javascript EXCEL 操作类代码
Jul 30 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
JavaScript移除数组内重复元素的方法
Mar 18 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
Jun 14 Javascript
Bootstrap CSS组件之大屏幕展播
Dec 17 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
layui 表格的属性的显示转换方法
Aug 14 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
php访问查询mysql数据的三种方法
2006/10/09 PHP
php 的反射详解及示例代码
2016/08/25 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
学习标兵获奖感言
2014/02/20 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
单身证明范本
2015/06/15 职场文书
小学生读书笔记
2015/07/01 职场文书
初三毕业感言
2015/07/31 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang
MySQL分区以及建索引的方法总结
2022/04/13 MySQL