表头固定应该是一个用得比较多的功能,参考了网上几个例子,在几个常用浏览器下显示不是很完美。而且很多都是基于固定的表格,在编码时多写一个固定的表头,对于动态生成的不知道多少列的表格就无从下手。而且例子中大多只能满足限定高度的情况,如果限定宽度,出现横向滚动条就无能为力了。

我的目的就是要像jquery-ui那样,找到页面上存在的表格,调用一个方法就可以实现固定表头的功能。趁着动手学习写jquery插件的机会,自己写了一个表头固定的插件。

使用方式和jquery-ui中的插件一样,只需要一行代码 $('#table1').fixHeader({height:100});

下列浏览器测试通过IE7 IE8 firefox16.0 chrome22.0

目前已知IE9下列不能对齐,手头暂时没有IE9来调试,以后再想法解决。

说明:

1 需要jquery,开发测试用的jquery-1.8.2,其他版本应该不大

2 表头部分的

需要写在里

3 不限定宽度情况下,自动适应表格宽度(假设滚动条宽度为20px,实际宽度为表格宽度+20px)

4 支持多行表头固定

5 通常表格所有列都显示,无横向滚动条,只需要竖向滚动条的功能。该插件支持限定宽度条件下的表头固定。

6 限定宽度和高度的条件下固定表头显示时,表头固定功能无法单纯通过css来实现,需要通过js实现,会有轻微闪烁

7 已经考虑table和th,td的border-width设置成不同值的情况

8 已经考虑了表头中绑定的事件,原表头中绑定的事件仍然保留

特别注意:IE浏览器下,一定要设置表格中td和th的border-width,否则无法正确设置列宽,表头和数据部分会错位

使用方法:

限定高度:$('#table1').fixHeader({height:100});

限定高度和宽度:$('#table3').fixHeader({height:100,width:500});

下面为完整代码

/*!

* fixHeader 1.0.0

* Copyright 2012 chokobo

*

* make table header fixed

*

* notice: set th,id border-width in IE

*

* tested browser: IE7 IE8 firefox16.0 chrome22.0

*/

(function( $, undefined ) {

$.fn.fixHeader = function(options){

var defaults = {

width: '',

height: ''

};

options = $.extend({}, defaults, options);

var elem = this;

if(options.height == ''){

return this;

}

var thead = elem.find('thead');

var fixTable = elem.clone().empty().removeAttr('id');

//set head default background-color

if(fixTable.css('background-color') == 'transparent' || fixTable.css('background-color') == ''){

fixTable.css('background-color', '#fff');

}

fixTable.css({

'position': 'absolute',

'top': '0px',

'border-bottom': $('tr:eq(0)', thead).find('th:eq(0), td:eq(0)').css('border-bottom-width')

});

$('tr:eq(0)', thead).find('th, td').each(function(){

var col = $(this);

if($.browser.mozilla){

col.width(col.width());

}

else if($.browser.chrome){

var colBorderWidth = parseInt(col.css('border-width'));

col.width(col.width()+colBorderWidth);

}

else if($.browser.msie){

var colBorderWidth = parseInt(col.css('border-width'));

if(colBorderWidth){

col.width(col.width()+colBorderWidth+colBorderWidth/2);//IE7??

}

}

});

//make head

var dummyHead = thead.clone();

thead.appendTo(fixTable);

dummyHead.prependTo(elem);

var tbodyWrapper = elem.wrap('

var tableWrapper = tbodyWrapper.wrap('

setTableWidth();

setWrapperSize();

fixTable.prependTo(tableWrapper);

return this;

function setTableWidth(){

if($.browser.mozilla){

elem.width(elem.width());

fixTable.css('width',elem.css('width'));

}

else if($.browser.chrome){

elem.width(elem.outerWidth());

fixTable.width(elem.outerWidth());

}

else if($.browser.msie){

elem.width(elem.outerWidth());

fixTable.width(elem.outerWidth());

}

else{

elem.width(elem.outerWidth());

fixTable.width(elem.outerWidth());

}

}

function setWrapperSize(){

var elemWidth = elem.outerWidth(true);

var elemHeight = elem.outerHeight(true);

var scrollBarWidth = 20;

if(options.width == ''){

tbodyWrapper.css({

'width': (elemWidth+scrollBarWidth) + 'px',

'height': options.height,

'overflow-x': 'hidden',

'overflow-y': 'auto'

});

}

else{

if(elemWidth <= options.width){

tbodyWrapper.css({

'width': options.width+'px',

'height': options.height,

'overflow-x': 'hidden',

'overflow-y': 'auto'

});

}

else{

tableWrapper.css({

'width': options.width,

'height': options.height,

'overflow': 'auto'

});

tableWrapper.scroll(function(){

fixTable.css('top',tableWrapper.scrollTop()+'px');

});

}

}

}

};

})( jQuery );

/*

功能:固定表頭。

使用容器的ID進行設定$("#div").chromatable({width: "100%",height: "100%", scrolling: "yes"})

table必須包含有標籤

參數:無。

*/

(function($){

$.chromatable = {

defaults: {

width: "900px", //設定容器寬度,待擴展程式

height: "300px", //設定容器高度,待擴展程式

scrolling: "yes" //yes跟隨IE滾動條而滑動, no固定在頁面上僅容器滾動條滑動

}

};

$.fn.chromatable = function(options){

var options = $.extend({}, $.chromatable.defaults, options);

return this.each(function(){

var $divObj = $(this);

var $tableObj = $divObj.find("table");

var $uniqueID = $tableObj.attr("ID") + ("wrapper");

var $class = $tableObj.attr("class");

var $tableWidth = $tableObj.width();

var top = $("#"+$tableObj.attr("ID")).offset().top;

var left = $("#"+$tableObj.attr("ID")).offset().left

$divObj.append("

");

$.each($("#"+$tableObj.attr("ID")).find("thead th"), function(i,item){

$("#"+$uniqueID).find("thead th").eq(i).width($(item).width());

$(item).width($(item).width());

});

if(options.scrolling === "yes")

{

scrollEvent($tableObj.attr("ID"), $uniqueID);

}

resizeEvent($tableObj.attr("ID"), $uniqueID);

});

function scrollEvent(tableId, uniqueID)

{

var element = $("#"+uniqueID);

$(window).scroll(function(){

var top = $("#"+tableId).offset().top;

var scrolls = $(this).scrollTop();

if (scrolls > top) {

if (window.XMLHttpRequest) {

element.css({

position: "fixed",

top: 0

});

} else {

element.css({

top: scrolls

});

}

}else {

element.css({

position: "absolute",

top: top

});

}

});

};

function resizeEvent(tableId, uniqueID)

{

var element = $("#"+uniqueID);

$(window).resize(function(){

var top = $("#"+tableId).offset().top;

var scrolls = $(this).scrollTop();

if (scrolls > top) {

if (window.XMLHttpRequest) {

element.css({

position: "fixed",

top: 0

});

} else {

element.css({

top: scrolls

});

}

}else {

element.css({

position: "absolute",

top: top

});

}

});

}

};

})(jQuery);

html表头固定原理,表头固定(利用jquery实现原理介绍)相关推荐

  1. 分类计数原理与分步计数原理_《分类加法计数原理与分步乘法计数原理》教学设计...

    一.本节课教学内容的本质.地位.作用分析 分类加法计数原理与分步乘法计数原理是人类在大量的实践经验的基础上归纳出的基本规律,它们不仅是推导排列数.组合数计算公式的依据,而且其基本思想方法也贯穿在解决本 ...

  2. java 表头固定_[Java教程]web开发:表头固定(利用jquery实现)_星空网

    web开发:表头固定(利用jquery实现) 2012-11-08 0 表头固定应该是一个用得比较多的功能,参考了网上几个例子,在几个常用浏览器下显示不是很完美.而且很多都是基于固定的表格,在编码时多 ...

  3. bootstrap表头如何展示不动_bootstrap-table实现表头固定以及列固定

    之前使用bootstrap写了一个报表表格,最近突然找到我,说让我看看能不能将表格的表头和第一列进行固定,这样的话方便查看数据,于是,我开始了苦逼的研究起来,毕竟我是个后端啊,对于前端的样式问题,特别 ...

  4. bootstrap表头如何展示不动_bootstrap-table实现表头固定以及列固定的方法示例

    之前使用bootstrap写了一个报表表格,最近突然找到我,说让我看看能不能将表格的表头和第一列进行固定,这样的话方便查看数据,于是,我开始了苦逼的研究起来,毕竟我是个后端啊,对于前端的样式问题,特别 ...

  5. css固定表格表头(各浏览器通用)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. WPF DataGrid 通过自定义表头模拟首行固定

    WPF DataGrid 通过自定义表头模拟首行固定 独立观察员 2021 年 9 月 25 日 最近工作中要在 WPF 中做个表格,自然首选就是 DataGrid 控件了.问题是,UI 设计的表格是 ...

  7. html css 表头,css固定表格表头(各浏览器通用)

    固定表格表头 div{ overflow-y: scroll; overflow-x: hidden; height: 100px; margin-top: 5px; margin-left: 12p ...

  8. 打印设置自定义表尾_教大家Excel2013表格中如何打印固定的表头和表尾

    近日有关于Excel2013表格中如何打印固定的表头和表尾的问题受到了很多网友们的关注,大多数网友都想要知道Excel2013表格中如何打印固定的表头和表尾的具体情况,那么关于到Excel2013表格 ...

  9. qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...

    我们在开发过程中对于表格使用频率还是挺高的,使用QT框架开发时候我们使用QTableView或者QTableWidget创建表格. 其中表格分为 表格头与表格体: 对于简单地表格,我们可以设置表头来满 ...

最新文章

  1. GPU上稀疏矩阵的基本线性代数
  2. torch==1.1.0和torchvision-0.3.0安装
  3. [9] ADB 查看设备信息
  4. linux图形界面装mysql_ubuntu 安装图形界面
  5. php中怎么判断输入密码与原密码一致_「每周FPGA案例」电子密码锁设计
  6. High Availability手册(3): 配置
  7. ad9 自动捕捉功能
  8. python 方差_python 方差_python 方差齐性检验_方差 python - 云+社区 - 腾讯云
  9. POJ 1088滑雪(3种解法)
  10. Power and Modulo(思维)
  11. Python 一键导出微信阅读记录和笔记!
  12. 关于File.separator[转]
  13. 北京慈文影视制作有限公司诉被告北京百度网讯科技有限公司侵犯著作权纠纷一案判决书
  14. 联想潮5000 BIOS 解锁 CFG Lock
  15. 输入一个大写英文字母,输出小写英文字母;输入一个小写英文字母输出一个大写英文字母
  16. 最长公共子序列、最长连续公共子序列、最长递增子序列
  17. 创客学院9天C语言三
  18. 生信小白学习日记Day2-2——NGS基础 NGS分析
  19. c二级语言程序编程题,二级C语言编程题 汇总整理篇.doc
  20. 基于单细胞多组学数据无监督构建基因调控网络

热门文章

  1. 爬虫和办公自动化(三)
  2. 美国公司里的同事关系
  3. 国外交友网站即时通讯支持多语言社交网站源码
  4. Power BI数据分析实战——柏拉图的制作
  5. 23 个机器学习开源项目,附源码
  6. 用户行为分析模型——路径分析(一)
  7. .com域名要涨价了,你续费了嘛?
  8. 用计算机千本樱,B 千本樱整理版
  9. 5.12 汶川大地震记忆(2008-06-23 15:34:50| 分类: 心情故事)
  10. umi引入css,umi中使用scss