基于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 初体验(建议学习jquery)
Apr 25 Javascript
向大师们学习Javascript(视频与PPT)
Dec 27 Javascript
jquery last-child 列表最后一项的样式
Jan 22 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
下拉列表select 由左边框移动到右边示例
Dec 04 Javascript
jQuery中replaceWith()方法用法实例
Dec 25 Javascript
JavaScript操作XML文件之XML读取方法
Jun 09 Javascript
jquery插件格式实例分析
Jun 16 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
echarts大屏字体自适应的方法步骤
Jul 12 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脚本数据库功能详解(下)
2006/10/09 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python 字符串中的字符倒转
2008/09/06 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
python多线程操作实例
2014/11/21 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
深入浅析python继承问题
2016/05/29 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
会议活动邀请函
2014/01/27 职场文书
体现团队精神的口号
2014/06/06 职场文书
525心理活动总结
2014/07/04 职场文书
个人年终总结结尾
2015/03/06 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP