基于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获取QueryString的方法小结
Feb 28 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
Dec 13 Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 Javascript
JS实现方形抽奖效果
Aug 27 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 Javascript
小程序组件之自定义顶部导航实例
Jun 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实现webshell扫描文件木马的方法
2017/07/31 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
白血病捐款倡议书
2014/05/14 职场文书
服务承诺书格式
2014/05/21 职场文书
社保转移委托书范本
2014/10/08 职场文书
员工开除通知书
2015/04/25 职场文书
治庸问责工作总结
2015/08/11 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
redis cluster支持pipeline的实现思路
2021/06/23 Redis
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python