基于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 相关文章推荐
使用Post提交时须将空格转换成加号的解释
Jan 14 Javascript
JQuery中两个ul标签的li互相移动实现方法
May 18 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
通过设置CSS中的position属性来固定层的位置
Dec 14 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
值得分享的轻量级Bootstrap Table表格插件
May 30 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
JS中数组重排序方法
Nov 11 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
Feb 27 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
ThinkPHP惯例配置文件详解
2014/07/14 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
YII框架http缓存操作示例
2019/04/29 PHP
phpinfo的知识点总结
2019/10/10 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
puppeteer库入门初探
2019/01/09 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python类属性与实例属性用法分析
2015/05/09 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python 字符串换行的多种方式
2018/09/06 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
python模拟实现分发扑克牌
2020/04/22 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
你常见到的runtime exception
2016/09/05 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
大学自我鉴定范文
2013/12/26 职场文书
机关门卫岗位职责
2013/12/30 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
财务工作失职检讨书
2014/11/21 职场文书
八年级英语教学计划
2015/01/23 职场文书
运输公司工作总结
2015/08/11 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技