基于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 相关文章推荐
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
jquery表单验证需要做些什么
Nov 17 Javascript
js实现鼠标拖拽多选功能示例
Aug 01 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
详细分析Node.js 模块系统
Jun 28 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
2009/06/29 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
高级技校毕业生自荐信
2013/11/18 职场文书
中国好声音广告词
2014/03/18 职场文书
合作经营协议书范本
2014/04/17 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
会议开幕词
2015/01/28 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis