基于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 节点遍历函数
Mar 28 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
JavaScript实现简单的日历效果
Sep 25 Javascript
Vue.js实现的表格增加删除demo示例
May 22 Javascript
微信小程序实现人脸检测功能
May 25 Javascript
vue的keep-alive中使用EventBus的方法
Apr 23 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
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
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue生命周期实例小结
2018/08/15 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
js编写简易的计算器
2020/07/29 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
python调用java的Webservice示例
2014/03/10 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python递归全排列实现方法
2018/08/18 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
医学类导师推荐信范文
2013/11/19 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
仓管员岗位职责
2015/02/03 职场文书
大连导游词
2015/02/12 职场文书
关于运动会的广播稿
2015/08/19 职场文书