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 相关文章推荐
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 Javascript
关于JQuery($.load)事件的用法和分析
Apr 09 Javascript
js 中将多个逗号替换为一个逗号的代码
Jun 07 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
关于vue-cli 3配置打包优化要点(推荐)
Apr 22 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php防止sql注入的方法详解
2017/02/20 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
js arguments.callee的应用代码
2009/05/07 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python显示生日是星期几的方法
2015/05/27 Python
python 内置模块详解
2019/01/01 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
python实现智能语音天气预报
2019/12/02 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
质量保证书格式模板
2015/02/27 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
个人自荐书怎么写
2015/03/26 职场文书
决心书格式范文
2015/09/23 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
七年级作文之游记
2019/12/11 职场文书
Python天气语音播报小助手
2021/09/25 Python
Python闭包的定义和使用方法
2022/04/11 Python