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 相关文章推荐
js 动态选中下拉框
Nov 26 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
Angular4学习笔记之新建项目的方法
Jul 18 Javascript
vue绑定的点击事件阻止冒泡的实例
Feb 08 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
Javascript原生ajax请求代码实例
Feb 20 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php根据年月获取季度的方法
2014/03/31 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
Element Steps步骤条的使用方法
2020/07/26 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Django的分页器实例(paginator)
2017/12/01 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
python3中编码获取网页的实例方法
2020/11/16 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
2014和解协议书范文
2014/09/15 职场文书
2014公司年终工作总结
2014/12/19 职场文书
独生子女证明范本
2015/06/19 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js