jQuery实现冻结表头的方法


Posted in Javascript onMarch 09, 2015

本文实例讲述了jQuery实现冻结表头的方法。分享给大家供大家参考。具体如下:

前段时间做项目时候由于需要显示一个列表,但是由于数据太多在滚动的时候表头必须冻结住,所以就写了下面这个脚本(曾经在网上也找过相应的脚本,但是不怎么理想所以就自己写了,但是目前由于项目仅仅用到了表头的冻结,而不需要指定列冻结所以目前只能算个不完整的脚本,不过一般的仅仅需要表头冻结就可以使用了),现在先看看截图:

jQuery实现冻结表头的方法

这样实现了表头的冻结,下面表体内容可以自由滚动

看下代码:

//为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会出现表头的宽度不准确的问题。

完整实例代码点击此处本站下载。

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
javascript引导程序
Oct 26 Javascript
JavaScript 高级语法介绍
Jun 15 Javascript
javascript instanceof 内部机制探析
Oct 15 Javascript
JavaScript 更严格的相等 [译]
Sep 20 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
jQuery常用知识点总结以及平时封装常用函数
Feb 23 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
通过bootstrap全面学习less
Nov 09 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 #Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 #Javascript
基于jQuery创建鼠标悬停效果的方法
Mar 07 #Javascript
JS实现文件动态顺序载入的方法
Mar 07 #Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 #Javascript
PHP守护进程实例
Mar 06 #Javascript
JavaScript操作Oracle数据库示例
Mar 06 #Javascript
You might like
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
一个javascript图片阅览组件
2010/11/09 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
微信小程序中转义字符的处理方法
2019/03/28 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
Python学生成绩管理系统简洁版
2020/04/05 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
求职简历自荐信范文
2013/10/21 职场文书
公司同意接收函
2014/01/13 职场文书
青年文明号事迹材料
2014/01/18 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
pytorch中[..., 0]的用法说明
2021/05/20 Python
Python实现Hash算法
2022/03/18 Python
muduo TcpServer模块源码分析
2022/04/26 Redis