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 相关文章推荐
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
jQuery提交多个表单的小技巧
Jul 27 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
Feb 21 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
原生JS实现列表内容自动向上滚动效果
May 22 Javascript
如何构建 vue-ssr 项目的方法步骤
Aug 04 Javascript
Node.JS如何实现JWT原理
Sep 18 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 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
javascript常用函数(1)
2015/11/04 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python实现代码统计程序
2019/09/19 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
Django xadmin安装及使用详解
2020/10/26 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
职称评定自我鉴定
2014/03/18 职场文书
日语专业求职信
2014/07/04 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
财务部岗位职责范本
2015/04/14 职场文书