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 相关文章推荐
jQuery 浮动广告实现代码
Dec 25 Javascript
javascript实现上传图片并预览的效果实现代码
Apr 11 Javascript
无缝滚动js代码通俗易懂(自写)
Jun 19 Javascript
页面定时刷新(1秒刷新一次)
Nov 22 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
详解如何制作并发布一个vue的组件的npm包
Nov 10 Javascript
Layui Form 自定义验证的实例代码
Sep 14 Javascript
VUE.js实现动态设置输入框disabled属性
Oct 28 Javascript
token 机制和实现方式
Dec 15 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python实例一个类背后发生了什么
2016/02/09 Python
快速了解Python中的装饰器
2018/01/11 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
遗嘱继承公证书
2014/04/09 职场文书
体育教师求职信
2014/05/24 职场文书
经典禁毒标语
2014/06/16 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
获奖感言一句话
2015/07/31 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
七年级作文之英语老师
2019/10/28 职场文书