table表格固定前几列,其余的滚动
我查了好多资料,只找到一个demo
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>new document</title>
<script type="text/javascript"
src="http://code.jquery.com/jquery-1.6.1.min.js"></script> <script type="text/javascript"> function FixTable(TableID, FixColumnNumber, width, height) {
if ($("#" + TableID + "_tableLayout").length != 0) {
$("#" + TableID + "_tableLayout").before($("#" + TableID));
$("#" + TableID + "_tableLayout").empty();
} else {
$("#" + TableID).after("<div id='" + TableID + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + width + "px;'></div>");
}
$('<div id="' + TableID + '_tableFix"></div>'
+ '<div id="' + TableID + '_tableHead"></div>'
+ '<div id="' + TableID + '_tableColumn"></div>'
+ '<div id="' + TableID + '_tableData"></div>').appendTo("#" + TableID + "_tableLayout");
var oldtable = $("#" + TableID);
var tableFixClone = oldtable.clone(true);
tableFixClone.attr("id", TableID + "_tableFixClone");
$("#" + TableID + "_tableFix").append(tableFixClone);
var tableHeadClone = oldtable.clone(true);
tableHeadClone.attr("id", TableID + "_tableHeadClone");
$("#" + TableID + "_tableHead").append(tableHeadClone);
var tableColumnClone = oldtable.clone(true);
tableColumnClone.attr("id", TableID + "_tableColumnClone");
$("#" + TableID + "_tableColumn").append(tableColumnClone);
$("#" + TableID + "_tableData").append(oldtable);
$("#" + TableID + "_tableLayout table").each(function () {
$(this).css("margin", "0");
});
var HeadHeight = $("#" + TableID + "_tableHead thead").height();
HeadHeight += 2;
$("#" + TableID + "_tableHead").css("height", HeadHeight);
$("#" + TableID + "_tableFix").css("height", HeadHeight);
var ColumnsWidth = 0;
var ColumnsNumber = 0;
$("#" + TableID + "_tableColumn tr:last td:lt(" + FixColumnNumber + ")").each(function () {
ColumnsWidth += $(this).outerWidth(true);
ColumnsNumber++;
});
ColumnsWidth += 2;
if ($.browser.msie) {
switch ($.browser.version) {
case "7.0":
if (ColumnsNumber >= 3) ColumnsWidth--;
break;
case "8.0":
if (ColumnsNumber >= 2) ColumnsWidth--;
break;
}
}
$("#" + TableID + "_tableColumn").css("width", ColumnsWidth);
$("#" + TableID + "_tableFix").css("width", ColumnsWidth);
$("#" + TableID + "_tableData").scroll(function () {
$("#" + TableID + "_tableHead").scrollLeft($("#" + TableID + "_tableData").scrollLeft());
$("#" + TableID + "_tableColumn").scrollTop($("#" + TableID + "_tableData").scrollTop());
});
$("#" + TableID + "_tableFix").css({
"overflow": "hidden",
"position": "relative",
"z-index": "50",
"background-color": "Silver"
});
$("#" + TableID + "_tableHead").css({
"overflow": "hidden",
"width": width - 17,
"position": "relative",
"z-index": "45",
"background-color": "Silver"
});
$("#" + TableID + "_tableColumn").css({
"overflow": "hidden",
"height": height - 17,
"position": "relative",
"z-index": "40",
"background-color": "Silver"
});
$("#" + TableID + "_tableData").css({
"overflow": "scroll",
"width": width,
"height": height,
"position": "relative",
"z-index": "35"
});
if ($("#" + TableID + "_tableHead").width() > $("#" + TableID + "_tableFix table").width()) {
$("#" + TableID + "_tableHead").css("width", $("#" + TableID + "_tableFix table").width());
$("#" + TableID + "_tableData").css("width", $("#" + TableID + "_tableFix table").width() + 17);
}
if ($("#" + TableID + "_tableColumn").height() > $("#" + TableID + "_tableColumn table").height()) {
$("#" + TableID + "_tableColumn").css("height", $("#" + TableID + "_tableColumn table").height());
$("#" + TableID + "_tableData").css("height", $("#" + TableID + "_tableColumn table").height() + 17);
}
$("#" + TableID + "_tableFix").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableHead").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableColumn").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableData").offset($("#" + TableID + "_tableLayout").offset());
} $(document).ready(function () {
FixTable("MyTable", 2, 600, 400);
});
</script>
</head>
<body>
<table style="border-bottom-color: black; border-top-color: black; width: 1000px; color: #000000; border-right-color: black; font-size: medium; border-left-color: black"
id="MyTable" border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th style="text-align: center; width: 80px" rowspan="3">姓名</th>
<th style="text-align: center; width: 80px" rowspan="3">班级</th>
<th style="text-align: center" colspan="10">成绩</th>
</tr>
<tr>
<th style="text-align: center" colspan="3">主科</th>
<th style="text-align: center" colspan="3">文科</th>
<th style="text-align: center" colspan="3">理科</th>
<th style="text-align: center; width: 80px" rowspan="2">总分</th>
</tr>
<tr>
<th style="text-align: center; width: 80px">语文</th>
<th style="text-align: center; width: 80px">数学</th>
<th style="text-align: center; width: 80px">英语</th>
<th style="text-align: center; width: 80px">政治</th>
<th style="text-align: center; width: 80px">历史</th>
<th style="text-align: center; width: 80px">地理</th>
<th style="text-align: center; width: 80px">物理</th>
<th style="text-align: center; width: 80px">化学</th>
<th style="text-align: center; width: 80px">生物</th>
</tr>
</thead>
<tbody>
<!-- 数据行 -->
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
<tr>
<td>学生32</td>
<td>班级1</td>
<td>29</td>
<td>25</td>
<td>146</td>
<td>28</td>
<td>79</td>
<td>73</td>
<td>47</td>
<td>8</td>
<td>91</td>
<td>526</td>
</tr>
</tbody>
</table>
</body>
</html>
然后结合我们的项目来完成,用的vue,jquery虽然可以可以跟依赖一样加载到vue项目中,但是只有2.0以后的版本可以,这个demo的一些语法再1.9版本已被删除,所以只能在index.html页面引入jquery,废话不多说,上代码
html:
<table id="MyTable" border='0' cellspacing='0' cellpadding='0' class='campus_table'>
<tbody v-for="ele in dataList" :key="ele.userid" class="pr" style="display: inline-block;">
<tr>
<td class="tb_header">名字</td>
<td class="tb_header">时间</td>
<td v-for="time in dateList" :key="time" class="tb_header"
:class="{ 'holidays': getWeek(month,time) == '周六' || getWeek(month,time) == '周日'}">
{{time}}日
<p style='font-size:12px;color:#999;' v-text="getWeek(month,time)"></p>
</td>
</tr>
<tr v-for="me,i in ele.time" :key="i">
<td v-if="i == 0" :rowspan="ele.span">{{ele.name}}</td>
<td class="abs_td">
{{me}}
</td>
<td v-for="time in dateList" :key="time" class="td_hover" :class="{ 'holidays': getWeek(month,time) == '周六' || getWeek(month,time) == '周日'}" @click="$refs.newSunmerMany.showFn(ele.name,ele.userid,nowYear,month,time,me)">
</td>
</tr>
</tbody>
</table>
js:
function FixTable(TableID, FixColumnNumber, width, height) {
if ($("#" + TableID + "_tableLayout").length != 0) {
$("#" + TableID + "_tableLayout").before($("#" + TableID));
$("#" + TableID + "_tableLayout").empty();
} else {
$("#" + TableID).after("<div id='" + TableID + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + width + "px;'></div>");
}
$('<div id="' + TableID + '_tableFix"></div>'
+ '<div id="' + TableID + '_tableHead"></div>'
+ '<div id="' + TableID + '_tableColumn"></div>'
+ '<div id="' + TableID + '_tableData"></div>').appendTo("#" + TableID + "_tableLayout");
var oldtable = $("#" + TableID);
var tableFixClone = oldtable.clone(true);
tableFixClone.attr("id", TableID + "_tableFixClone");
$("#" + TableID + "_tableFix").append(tableFixClone);
var tableHeadClone = oldtable.clone(true);
tableHeadClone.attr("id", TableID + "_tableHeadClone");
$("#" + TableID + "_tableHead").append(tableHeadClone);
var tableColumnClone = oldtable.clone(true);
tableColumnClone.attr("id", TableID + "_tableColumnClone");
$("#" + TableID + "_tableColumn").append(tableColumnClone);
$("#" + TableID + "_tableData").append(oldtable);
$("#" + TableID + "_tableLayout table").each(function () {
$(this).css("margin", "0");
});
var HeadHeight = $("#" + TableID + "_tableHead thead").height();
HeadHeight += 2;
$("#" + TableID + "_tableHead").css("height", HeadHeight);
$("#" + TableID + "_tableFix").css("height", HeadHeight);
var ColumnsWidth = 0;
var ColumnsNumber = 0;
$("#" + TableID + "_tableColumn tr:last td:lt(" + FixColumnNumber + ")").each(function () {
ColumnsWidth += $(this).outerWidth(true);
ColumnsNumber++;
});
ColumnsWidth += 2;
if ($.browser.msie) {
switch ($.browser.version) {
case "7.0":
if (ColumnsNumber >= 3) ColumnsWidth--;
break;
case "8.0":
if (ColumnsNumber >= 2) ColumnsWidth--;
break;
}
}
$("#" + TableID + "_tableColumn").css("width", ColumnsWidth);
$("#" + TableID + "_tableFix").css("width", ColumnsWidth);
$("#" + TableID + "_tableData").scroll(function () {
$("#" + TableID + "_tableHead").scrollLeft($("#" + TableID + "_tableData").scrollLeft());
$("#" + TableID + "_tableColumn").scrollTop($("#" + TableID + "_tableData").scrollTop());
});
$("#" + TableID + "_tableFix").css({
"overflow": "hidden",
"position": "relative",
"z-index": "5",
"background-color": "#fff"
});
$("#" + TableID + "_tableHead").css({
"overflow": "hidden",
"width": width - 17,
"position": "relative",
"z-index": "4",
"background-color": "#fff"
});
$("#" + TableID + "_tableColumn").css({
"overflow": "hidden",
"height": height - 17,
"position": "relative",
"z-index": "4",
"background-color": "#fff"
});
$("#" + TableID + "_tableData").css({
"overflow": "scroll",
"width": width,
"height": height,
"position": "relative",
"z-index": "3"
});
if ($("#" + TableID + "_tableHead").width() > $("#" + TableID + "_tableFix table").width()) {
$("#" + TableID + "_tableHead").css("width", $("#" + TableID + "_tableFix table").width());
$("#" + TableID + "_tableData").css("width", $("#" + TableID + "_tableFix table").width() + 17);
}
if ($("#" + TableID + "_tableColumn").height() > $("#" + TableID + "_tableColumn table").height()) {
$("#" + TableID + "_tableColumn").css("height", $("#" + TableID + "_tableColumn table").height());
$("#" + TableID + "_tableData").css("height", $("#" + TableID + "_tableColumn table").height() + 17);
}
$("#" + TableID + "_tableFix").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableHead").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableColumn").offset($("#" + TableID + "_tableLayout").offset());
$("#" + TableID + "_tableData").offset($("#" + TableID + "_tableLayout").offset());
}
let that = this;
let clientWidth = document.body.clientWidth - 180;
let clientHeight = document.body.clientHeight - 300;
setTimeout(function() {
FixTable("MyTable", 2, clientWidth > 600? clientWidth : 600, clientHeight > 300 ? clientHeight : 300); let myDate = new Date();
let month = myDate.getMonth() + 1;
let day = myDate.getDate();
let week = myDate.getDay();
let classPage = document.getElementById('MyTable_tableData');
let left = 0;
if (month == that.month) {
if (day > 7) {
if (that.dateList.length - day > 7) {
left = 80 * (day + 2 - week);
} else {
left = 80 * (day + 2 - week - 7);
}
}
classPage.scrollLeft = left;
}
},0);
设置定时器是因为:
Vue 的官方是不建议直接操作 DOM 的,Vue 的用途在于视图和数据的绑定。如果通过JQuery 直接操作 DOM 的话,势必会造成视图数据和模型数据的不匹配,这样 Vue 就失去它存在的意义了。
JQuery 和 VueJS 合理使用并不会造成冲突,因为他们的侧重点不同,VueJS 侧重数据绑定和视图组件,JQuery 侧重异步请求和动画效果。如果使用JQuery + VueJS 开发,一定要在 Vue 渲染完所有的 HTML组件之后再通过 JQuery 处理,而使用 JQuery 时应避免直接操作 DOM ,但是应用动画是允许的。
JQuery 与 VueJS 相互配合可以非常高效的完成异步任务,首先通过 JQuery 发出 Ajax 请求,接受到服务端传递的 JSON 数据后,再通过 Vue 将数据绑定到组件上,最后由 JQuery 进行动画处理,整个过程就如行云流水般自然。
说句题外话,Vue 的目的不是取代 JQuery,它是为了解决前后端分离而出现的。如果没有数据变化,只是单纯的样式变化,则没有必要去大费周章进行视图模型的绑定,并且还不利于 SEO 优化。
table表格固定前几列,其余的滚动的更多相关文章
- bootstrap table 怎么实现前两列固定冻结?
$("#Table").bootstrapTable('destroy').bootstrapTable({ pagination: true,//分页 minimumCountC ...
- jquery隐藏table表格的某一列
jquery隐藏table表格的某一列: $('table tr').find('td:eq(13)').hide(); 隐藏table的第13列
- table固定前两列和最后一列,其他滑动显示
网上搜的基本都是4个table做的,数据处理比较麻烦,写了个一个table的,此示例只固定了前两列和最后一列,和网上的不太一样. 网上搜的基本都是4个table做的,数据处理比较麻烦,写了个一个tab ...
- table表格整体居中 和 table表格中各行各列内容居中
1.table表格整个居中<div style="text-align: center;"> <table border="1" style= ...
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
最近做的后台管理系统要处理大量的表格 原项目是采用的for循环加拼接字符串的方式实现;导致js代码一大堆;各种单引号和双引号的嵌套;让人头疼;遂引入vue.js;用v-for做模板渲染;工作量顿时减轻 ...
- table 表格固定表头和第一列、内容可滚动
整理了下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- JS+CSS - table 表格固定表头和第一列、内容可滚动 (转载)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- layui table表格 表头与内容列错位问题(只有纵向滚动条的情况)
版本2.4.5 问题展示: 存在问题:正好错位一个纵向滚动条的宽度 思路: 仔细观察th元素及th包裹的子元素div 如下图 发现th宽度莫名的就多了5px 我就纳闷了 解决方案:到table.js ...
- jQuery制作table表格布局插件带有列左右拖动效果
压缩包:http://www.xwcms.net/js/bddm/99004.html
随机推荐
- JAVA进阶12
间歇性混吃等死,持续性踌躇满志系列-------------第12天 1.字符串的概述和特点 java.lang.String类代表字符串 API当中说,Java程序中所有的字符串字面值(如“abc& ...
- IIS短文件漏洞(搬运整理)
0x01. IIS短文件漏洞的由来 Microsoft IIS 短文件/文件夹名称信息泄漏最开始由Vulnerability Research Team(漏洞研究团队)的Soroush Dalili在 ...
- scikit-learn 决策树 分类问题
1.Demo from sklearn import tree import pydotplus import numpy as np #李航p59表数据 #年龄,有工作,有自己房子,信贷情况,类别 ...
- 10张思维导图带你学习JavaScript
10张思维导图带你学习JavaScript 下面将po出10张JavaScript相关的思维导图. 分别归类为: JavaScript变量 JavaScript运算符 JavaScript数组 ...
- windows配置openssl
下载openssl并安装,下载地址:http://slproweb.com/products/Win32OpenSSL.html 假设安装路径为C:\"Program Files" ...
- VUE 导出Excel(iframe)
1. 概述 1.1 说明 在开发过程中,有时候需要导出某数据表格(excel)以便客户使用,使用iframe对返回二进制文件进行下载处理.记录此功能,以便后期使用. 2. 示例 2.1 vue示例代码 ...
- java集合(list,set,map)
集合 集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...
- @Transactional 无效原因
在controller 上面使用 @Transactional 注解时候发现数据没有回滚,在执行完update 更新语句,事务直接就commit 了, 此时方法尚未执行结束,数据库数据已经更新了. ...
- Hive SemanticException
hive, sex='boy'); FAILED: SemanticException Line : Invalid path ''/root/data/hdata.txt'': No files m ...
- Angular项目中共享模块的实现
创建share Modele:ng g m share import进来所有需要共享的模块都export出去, 一.共享CommonModule 暂时只有CommonModule,以后会有一些需要共享 ...