基于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 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
javascript针对DOM的应用分析(四)
Apr 15 Javascript
Jquery中扩展方法extend使用技巧
Aug 24 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
javascript去掉代码里面的注释
Jul 24 Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
JS中使用new Option()实现时间联动效果
Dec 10 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
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输出xml格式字符串(用的这个)
2012/07/12 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
浅析python递归函数和河内塔问题
2017/04/18 Python
快速了解python leveldb
2018/01/18 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
中科软笔试题和面试题
2014/10/07 面试题
初二数学教学反思
2016/02/17 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫