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 setTimeout和setInterval 的区别
Dec 08 Javascript
javascript中的注释使用与注意事项小结
Sep 20 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
angular实现form验证实例代码
Jan 17 Javascript
基于Axios 常用的请求方法别名(详解)
Mar 13 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
Aug 31 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 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
PHP制作图型计数器的例子
2006/10/09 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
JS访问对象两种方式区别解析
2020/08/29 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
python爬虫超时的处理的实例
2018/12/19 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
一份报关员的职业规划范文
2014/01/08 职场文书
实验室标语
2014/06/21 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
教师师德师风整改措施
2014/10/24 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
小学家长意见怎么写
2015/06/03 职场文书
2015暑假假期总结
2015/07/13 职场文书
python - timeit 时间模块
2021/04/06 Python
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript