JaveScript-解决表格使用滚动条时冻结表头栏问题
解决方法:
- //设置表格表头里的th==表格内容里的td
- function ThEqualTd(thId, tdId) {
- var tdNum = document.getElementById(tdId).rows[0].cells.length;//获取tdId表格中的第一行的列数
- var tdW = "";//清空tdW的宽度
- for (i = 0; i < tdNum; i++) {
- tdW = document.getElementById(tdId).rows[0].cells[i].offsetWidth;//获取tdId表格中的第一行第i列的宽度,定义其等于tdW
- document.getElementById(thId).rows[0].cells[i].width = tdW;//设置thId表格的第一行第i列的宽度=tdW
- }
- }
这里就本人的leonaScroll-1.3.js滚动条插件遇到的上述问题做详细说明
根据滚动条,我们做好布局,如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title></title>
- <meta charset="utf-8" />
- <script src="jquery-1.10.2.js"></script>
- <script src="leonaScroll-min-1.3.js"></script>
- </head>
- <body>
- <style>
- .table{width:500px; height:400px;border:1px solid #b6ff00; border-radius:10px; }
- .table table{ line-height:25px;border:1px solid #000000; }
- .table table td,.table table th{height:25px; text-align:center; }
- </style>
- <div class="table">
- <table>
- <tr><th>表头</th><th>表头</th><th>表头</th><th>表头</th><th>表头</th></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- </table>
- </div>
- <script>
- $(".table").LeonaScroll();
- </script>
- </body>
- </html>
问题:上述代码可以实现表格内容超出.table界定的400px时就,出现滚动条,并可以滚动显示内容,但是却出现一个问题,那就是我们的表头也会随内容一起向上滚动,以至于用户在查看地下内容时无法直观的看见我们的表头,而使表格做不到一目了然。针对这个问题,我做了以下处理:
1、首先将HTML的布局做调整,将表头和内容分别写在不同的table里,如下:
- <style>
- .all{width:500px; height:400px;border:1px solid #b6ff00; border-radius:10px; }
- table td,.table table th{height:25px; text-align:center; }
- .tableTh{width:100%; height:25px; }
- .tableTd{width:100%; height:375px;}
- .tableTd table{ line-height:25px;border:1px solid #000000; }
- </style>
- <div class="all"><!--整体全部(表头+外框)-->
- <table class="tableTh"><tr><th>表头</th><th>表头</th><th>表头</th><th>表头</th><th>表头</th></tr></table><!--表头-->
- <div class="tableTd"><!--外框(内容+滚动条)-->
- <table><!--内容-->
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- <tr><td>内容</td><td>内容</td><td>内容</td><td>内容</td><td>内容</td></tr>
- </table>
- </div>
- </div>
- <script>
- $(".tableTd").LeonaScroll();
- </script>
2、这样,由于表头与内容分隔,且表头不在滚动文本内容区域内,再滚动时,就会发现表头会一直冻结在表格内容之上。但是正因为分隔到不同的table中,又出现了一个问题,表格的th与td宽度不等。
这里如果你的td是设定死的宽度,那就很好办了,th宽度=td宽度就好了。然后很多时候我们使用表格,他的td是随内容长度大小去自适应变更的,所以这个时候我们就需要下面这段js,使他们实时相等了。
在这里我讲这段封成了一个方法,以便其调用:
- <script>
- $(".tableTd").LeonaScroll();//滚动条调用
- ThEqualTd("tabTh", "tabTd");//调用th=td
- //设置表格表头里的th==表格内容里的td
- function ThEqualTd(thId, tdId) {
- var tdNum = document.getElementById(tdId).rows[0].cells.length;//获取tdId表格中的第一行的列数
- var tdW = "";//清空tdW的宽度
- for (i = 0; i < tdNum; i++) {
- tdW = document.getElementById(tdId).rows[0].cells[i].offsetWidth;//获取tdId表格中的第一行第i列的宽度,定义其等于tdW
- document.getElementById(thId).rows[0].cells[i].width = tdW;//设置thId表格的第一行第i列的宽度=tdW
- }
- }
- </script>
3、恩,差不多可以看到效果了,但是,还差最后一步,也是细节,不可忽视哟!那就是我们还应该在考虑到滚动条占的位置,也就是我们的th表头里是没有滚动条的,然而,为了让表格的表头和内容更加协调。我们应该再加一个空的th,给其设置宽度等于滚动条所占的宽度,如下:
- <table class="tableTh" id="tabTh"><tr><th>表头</th><th>表头</th><th>表头</th><th>表头</th><th>表头</th><th width="14"></th></tr></table><!--表头-->4、
ok,这下就大功告成了。
作者:leona
JaveScript-解决表格使用滚动条时冻结表头栏问题的更多相关文章
- 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题
问题:boostrap-table有水平和垂直滚动条时,滚动条不高的时候(滚动高度比较大的时候没有问题),滚动条滑到最右边表格标题和内容单元格无法对齐的问题 问题原因:bootstrap-table源 ...
- WPF拖动DataGrid滚动条时内容混乱的解决方法
WPF拖动DataGrid滚动条时内容混乱的解决方法 在WPF中,如果DataGrid里使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况.解决方法就是在Binding的时候给Update ...
- QRowTable表格控件(五)-重写表头排序、支持第三次单击恢复默认排序
目录 一.原生表格 二.效果展示 三.实现方式 1.排序列定制 2.排序交互修改 四.相关文章 原文链接:QRowTable表格控件(五)-重写表头排序.支持第三次单击恢复默认排序 一.原生表格 开发 ...
- 解决表格里面使用text-overflow后依旧不能隐藏超出的文本
解决表格里面使用text-overflow后依旧不能隐藏超出的文本 来源: http://blog.csdn.net/colinmuxi/article/details/9069595 (非原创,自 ...
- Css解决表格超出部分用省略号显示
小伙伴们有没有的遇到页面显示时,因为数据太长导致显示的表格某一列过长,从而导致页面的不美观,下面我们来看一看如何用Css样式解决表格超出部分用省略号显示的问题. 主要设置两个样式: table{ ta ...
- 解决CSharpGL使用CGCompiler时发现的几个问题
解决CSharpGL使用CGCompiler时发现的几个问题 为了获取CSharpShadingLanguage的token流,我设计了这样一个文法: <Expression> ::= & ...
- 解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题
解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题 解决远程桌面链接时出现"The ...
- js Table冻结表头示例代码
Table冻结表头的js实现代码. Table冻结表头: <script type="text/javascript"> //冻结table的表头 function ...
- Swift - 将表格UITableView滚动条移动到底部
有时我们需要通过代码自动将表格UITableView滚动条移动到尾部,只需要使用scrollToRowAtIndexPath方法即可,代码如下: 1 2 3 4 5 var secon = 1 //最 ...
随机推荐
- 【中文分词】二阶隐马尔可夫模型2-HMM
在前一篇中介绍了用HMM做中文分词,对于未登录词(out-of-vocabulary, OOV)有良好的识别效果,但是缺点也十分明显--对于词典中的(in-vocabulary, IV)词却未能很好地 ...
- 导出BOM表
1.Report->Bill of Materials for Project 将Value拖上左上角的Grouped Columns 2.在Excel表中全选器件,右键设置"设置单元 ...
- STM32F746的RTC使用
1.RTC模块采用低速晶振外接始终:32.768KHz,如下图所示 2.配置RTC模块: 其中,Fck_apre.Fck_spre始终上配置不容易理解, 如果想得到1Hz的始终频率,则需要将PERDI ...
- Gate Of Babylon bzoj 1272
Gate Of Babylon (1s 128MB) babylon [问题描述] [输入格式] [输出格式] [样例输入] 2 1 10 13 3 [样例输出] 12 [样例说明] [数据范围] 题 ...
- MySQL引擎、索引和优化(li)
一.存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术 ...
- Redis主从复制
大家可以先看这篇文章ASP.NET Redis 开发对Redis有个初步的了解 Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此 ...
- 【IOS开发笔记03-视图相关】简单计算器的实现
UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...
- Android进阶--Acticivity的启动模式
一.引言 我们在多次启动同一个Activity时,系统默认会重复创建多个实例,这样看上去便十分的愚蠢,所以android在设计时提供了启动模式来修改系统的默认行为.目前有四种启动模式:standard ...
- Git 少用 Pull 多用 Fetch 和 Merge
本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...
- layer弹出信息框API
首先向大家推荐layer,在这里也非常感谢贤心的贡献,非常不错的信息框及弹出层解决方案,为一些项目的前端开发提高了很大的效率,希望layer 越办越好! 下面是API,呵呵,官方抄袭过来的,为了自己看 ...