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 $.getJSON()跨域请求
Dec 21 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
使用p5.js临摹动态图片
Nov 04 Javascript
vue开发移动端底部导航条功能
Apr 08 Javascript
JavaScript实现烟花绽放动画效果
Aug 04 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
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
利用python实现周期财务统计可视化
2019/08/25 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
SQL数据库笔试题
2016/03/08 面试题
如何唤起类中的一个方法
2013/11/29 面试题
高中数学教学反思
2014/01/30 职场文书
旷课检讨书3000字
2014/02/04 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
殡葬服务心得体会
2014/09/11 职场文书
营销经理工作检讨书
2014/11/03 职场文书
欢迎词怎么写
2015/01/23 职场文书
工作试用期自我评价
2015/03/10 职场文书