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 相关文章推荐
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
Jul 20 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 Javascript
小程序分享模块超级详解(推荐)
Apr 10 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
webpack的 rquire.context用法实现工程自动化的方法
Feb 07 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 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
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
javascript的几种写法总结
2016/09/30 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
python字符串连接的N种方式总结
2014/09/17 Python
Python字典操作简明总结
2015/04/13 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python颜色随机生成器的实例代码
2020/01/10 Python
sklearn+python:线性回归案例
2020/02/24 Python
Python实现自动装机功能案例分析
2020/10/22 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
20岁生日感言
2014/01/13 职场文书
开发房地产协议书
2014/09/14 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
教师师德承诺书2016
2016/03/25 职场文书