基于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中匿名函数,函数直接量和闭包
May 08 Javascript
一样的table?不一样的table(可编辑状态table)
Sep 19 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
javascript数组详解
Oct 22 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
js实现符合国情的日期插件详解
Jan 19 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 Javascript
Vue自动构建发布脚本的方法示例
Jul 24 Javascript
vue路由分文件拆分管理详解
Aug 13 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php微信开发接入
2016/08/27 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
flask框架路由常用定义方式总结
2019/07/23 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
电子信息专业自荐书
2014/02/04 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
出生医学证明书
2014/09/15 职场文书
圣诞晚会主持词
2015/07/01 职场文书
TS 类型兼容教程示例详解
2022/09/23 Javascript