对el-table表格的表头操作

 效果1:单层表头合并

图示1:

 说明:

  • header-cell-style函数用于给表头添加样式,其返回的值会被添加到表头对应样式中去
  • 注意函数的形参中的column.id为单元格的class
  • 大家最好打印一下,结合审查dom看类名

代码:

<template><el-table:data="tableData"borderstyle="width: 600":header-cell-style="headerCellStyle"><el-table-columnprop="name"label="姓名、年龄、家乡"width="150"align="center"></el-table-column><el-table-columnprop="age"label="年龄"width="150"align="center"></el-table-column><el-table-columnprop="home"label="家乡"width="150"align="center"></el-table-column><el-table-columnprop="hobby"label="爱好"width="150"align="center"></el-table-column></el-table>
</template><script>
export default {data() {return {tableData: [{name: "孙悟空",age: 500,home: "花果山水帘洞",hobby: "大闹天宫",},{name: "猪八戒",age: 88,home: "高老庄",hobby: "吃包子",},{name: "沙和尚",age: 1000,home: "通天河",hobby: "游泳",},{name: "唐僧",age: 99999,home: "东土大唐",hobby: "取西经",},],};},methods: {headerCellStyle({ row, column, rowIndex, columnIndex }) {// 第一步:设置表头的第0列暂不操作,将地1列和第2列隐去使其消失if ((columnIndex == 1) | (columnIndex == 2)) {return { display: "none" };}// 第二步, 由于1、2列没有了,后续列就会贴上来(后续列往左错位问题)if ((rowIndex == 0) & (columnIndex == 0)) {// 解决后续列错位问题,就是将隐去的第1、2列的位置再补上,通过第0列来补this.$nextTick(() => {// 原来第0列只占据一个位置,现在要去占据三个位置。即占据三列,即设置为横向三个单元格document.querySelector(`.${column.id}`).setAttribute("colspan", "3");// 这里的column.id实际是dom元素的class,故用点.不用井#,可审查dom验证// 通过设置原生的colspan属性,让原来的第一列只占据一个单元格的表头占据3个单元格即可});}},},
};
</script><style lang="less">
.el-table {th {font-weight: bold;color: #333;}
}
</style>

看,基本上一样的用法:先隐藏再设置横跨竖跨单元格

colspan='number' 属性,设置单元格可以横跨几列(默认一个单元格横向只占据一列)

图示2:

代码:

headerCellStyle({ row, column, rowIndex, columnIndex }) {// 第一步:隐去第2列单元格if (columnIndex == 2) {return { display: "none" };}// 第二步,让第1列单元格横跨两列(默认单元格只是横跨一列)if ((rowIndex == 0) & (columnIndex == 1)) {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "2");});}
},

图示3:

代码:

headerCellStyle({ row, column, rowIndex, columnIndex }) {// 第一步:隐去第3列单元格if (columnIndex == 3) {return { display: "none" };}// 第二步,让第2列单元格横跨两列(默认单元格只是横跨一列)if ((rowIndex == 0) & (columnIndex == 2)) {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "2");});}
},

图示4:

代码:

headerCellStyle({ row, column, rowIndex, columnIndex }) {// 第一步:隐去第1、2、3列单元格let hideColArr = [1, 2, 3];if (hideColArr.includes(columnIndex)) {return { display: "none" };}// 第二步,让第0列单元格横跨四列(默认单元格只是横跨一列)if ((rowIndex == 0) & (columnIndex == 0)) {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "4");});}
},

效果2:el-table多级表头合并

图示1:

说明: 

  • 多级表头,需要进一步通过rowIndex去找到对应的单元格
  • 因为单层表头,表头只有1行,rowIndex肯定是0,所以写不写都无所谓
  • 但是多级表头有不少行,所以需要使用 columnIndex,rowIndex 进一步定位单元格
  • 类似于通过X轴 Y轴的坐标定位到某个单元格位置

代码:

html部分需要el-table-column标签进行嵌套

<template><el-table:data="tableData"borderstyle="width: 600":header-cell-style="headerCellStyle"><el-table-column prop="name" label="姓名" width="150" align="center"><el-table-columnprop="name"label="三列基础信息"width="150"align="center"></el-table-column></el-table-column><el-table-column prop="name" label="年龄" width="150" align="center"><el-table-columnprop="age"label="年龄"width="150"align="center"></el-table-column></el-table-column><el-table-column prop="name" label="家乡" width="150" align="center"><el-table-columnprop="home"label="家乡"width="150"align="center"></el-table-column></el-table-column><el-table-columnprop="hobby"label="爱好"width="150"align="center"></el-table-column></el-table>
</template>

js部分:

headerCellStyle({ row, column, rowIndex, columnIndex }) {// 把第1列第1行和第2列第1行的单元格隐去if ((columnIndex == 1) | (columnIndex == 2)) {if (rowIndex == 1) { // 加上rowIndex精准定位return { display: "none" };}}// 然后让第0列第1行的单元格横向占据3个单元格位置填充刚刚隐去导致的空白if ((columnIndex == 0) & (rowIndex == 1)) { // 加上rowIndex精准定位this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "3");});}
},

图示2:

代码:

html部分

<template><el-table:data="tableData"borderstyle="width: 600":header-cell-style="headerCellStyle"><el-table-columnprop="name"label="基本信息(姓名、年龄、家乡)"align="center"></el-table-column><el-table-columnprop="age"label="年龄"align="center"></el-table-column><el-table-columnprop="home"label="家乡"align="center"></el-table-column><el-table-column prop="kind" label="所属种族" align="center"></el-table-column><el-table-column label="重要信息" align="center"><el-table-column label="公开重要信息" align="center"><el-table-column prop="nickname" label="法号" align="center"></el-table-column><el-table-column prop="hobby" label="爱好&性格" align="center"></el-table-column><el-table-column prop="personality" label="性格" align="center"></el-table-column></el-table-column><el-table-column label="保密重要信息" align="center"><el-table-column prop="bornBackground" label="出身背景" align="center"></el-table-column><el-table-column prop="skill" label="技能" align="center"></el-table-column></el-table-column></el-table-column></el-table>
</template>

js部分:

<script>
export default {data() {return {tableData: [{name: "孙悟空",age: 500,home: "花果山水帘洞",kind: "monkey",nickname: "斗战胜佛",hobby: "大闹天宫",personality: "勇敢坚韧、疾恶如仇",bornBackground: "仙石孕育而生",skill: "72变、筋斗云",},{name: "猪八戒",age: 88,home: "高老庄",kind: "pig",nickname: "净坛使者",hobby: "吃包子",personality: "好吃懒做、贪图女色",bornBackground: "天蓬元帅错投猪胎",skill: "36变",},{name: "沙和尚",age: 1000,home: "通天河",kind: "human",nickname: "金身罗汉",hobby: "游泳",personality: "憨厚老实、任劳任怨",bornBackground: "卷帘大将被贬下界",skill: "18变",},{name: "唐僧",age: 99999,home: "东土大唐",kind: "human",nickname: "檀功德佛",hobby: "取西经",personality: "谦恭儒雅、愚善固执",bornBackground: "金蝉子转世",skill: "念紧箍咒",},],};},methods: {headerCellStyle({ row, column, rowIndex, columnIndex }) {/*** 合并:基本信息(姓名、年龄、家乡)单元格【通过行与列的索引来合并】* */let colArr = [1, 2];if (colArr.includes(columnIndex)) {if (rowIndex == 0) {// 把第1列第0行和第2列第0行的单元格隐去return { display: "none" };}}if ((columnIndex == 0) & (rowIndex == 0)) {// 把第0列第0行的单元格横向延伸,补上刚刚隐去的单元格位置,并上个色this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "3");});return { background: "pink" };}/*** 合并:重要信息--->公开重要信息--->爱好性格单元格 【通过单元格的文字内容来合并】* */if (column.label == "性格") {return { display: "none" };}if (column.label == "爱好&性格") {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "2");});return { background: "orange" }; // 不加这个也行,加了只是为了更好区分}/*** 重要!重要!重要!*    我们想要合并表头的单元格,需要先找到对应单元格*    可以通过列column对象的label或者行与列索引来找到,找到以后进行隐藏或合并*    也可以遍历行row数组找,不过会麻烦一些,个人建议通过column来找* */// 通过column找if (column.label == "技能") {return { background: "#baf" };}// 通过row找for (const item of row) {if (item.label == "重要信息") {this.$nextTick(() => {document.querySelector(`.${item.id}`).style.background = "#ea66a6";});break;}}},},
};
</script>
  • 还可以,直接通过column.label找到对应单元格,然后进行合并单元格操作,不使用rowIndex和columnIndex了
  • 这种方式,在某些情况下,会更加方便
  • 但无论哪种方式,本质思路都是先找到单元格,再进行合并相关操作
headerCellStyle({ row, column, rowIndex, columnIndex }) {// 第一部分的合并if (column.label == "年龄") {return { display: "none" };}if (column.label == "家乡") {return { display: "none" };}if (column.label == "基本信息(姓名、年龄、家乡)") {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "3");});return { background: "pink" };}// 第二部分的合并if (column.label == "性格") {return { display: "none" };}if (column.label == "爱好&性格") {this.$nextTick(() => {document.querySelector(`.${column.id}`).setAttribute("colspan", "2");});return { background: "orange" };}
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499887.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目中定时任务的四种实现方式

文章目录 1. 使用Scheduled注解1.1 时间间隔执行1.2 固定时间点执行 2. 使用EnableScheduling注解启用定时任务3. 实现SchedulingConfigurer接口4. 使用Quartz框架4.1 配置QuartzScheduler4.2 定义Job类和Trigger类 5. 总结 在开发现代应用时&#xff0c;定时任务是一个非常常见…

T-BOC-Aminooxy-PEG2-amine,252378-69-1,分子生物偶联常用试剂

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;252378-69-1&#xff0c;T-BOC-Aminooxy-PEG2-amine&#xff0c;T-BOC-Aminooxy-PEG2-NH2&#xff0c;t-Boc-氨基氧基-PEG2-胺&#xff0c;T-BOC-氨氧基-二聚乙二醇-氨基 一、基本信息 【产品简介】&#xff1a;The…

【leetcode】移除链表元素

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 方法1. 直接在原链表上移除方法2 点击查看题目 方法1. 直接在原链表上移除 思路&#xff1a; 因为…

利用 Python 抓取数据探索汽车市场趋势

一、引言 随着全球对环境保护意识的增强和技术的进步&#xff0c;新能源汽车作为一种环保、高效的交通工具&#xff0c;正逐渐受到人们的关注和青睐。在这个背景下&#xff0c;对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言&#xff0c;结…

CBAM注意力机制详解(附pytorch复现)

简介 论文原址&#xff1a;1807.06521.pdf (arxiv.org) CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一种卷积神经网络模块&#xff0c;旨在通过引入注意力机制来提升网络的表示能力。CBAM包含两个顺序子模块&#xff1a;通道注意力模块和空间注意力…

Unity(第二十二部)官方的反向动力学一般使用商城的IK插件,这个用的不多

反向动力学&#xff08;Inverse Kinematic&#xff0c;简称IK&#xff09;是一种通过子节点带动父节点运动的方法。 正向动力学 在骨骼动画中&#xff0c;大多数动画是通过将骨架中的关节角度旋转到预定值来生成的&#xff0c;子关节的位置根据父关节的旋转而改变&#xff0c;这…

4G音柱Ip音柱-街道社区反诈宣传4G音柱 4G广播音柱城市防洪工程管理处防汛排涝信息系统 智慧城市文明交通广播4G音柱

4G音柱Ip音柱-街道社区反诈宣传4G音柱 4G广播音柱城市防洪工程管理处防汛排涝信息系统 智慧城市文明交通广播4G音柱 SV-7042UG是深圳锐科达电子有限公司的一款壁挂式4G无线网络音柱&#xff0c;通过4G无线卡联网&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xf…

【报名指南】2024年第九届数维杯数学建模挑战赛报名全流程图解

1.官方报名链接&#xff1a; 2024年第九届数维杯大学生数学建模挑战赛http://www.nmmcm.org.cn/match_detail/32 2.报名流程&#xff08;电脑与手机报名操作流程一致&#xff09; 参赛对象为在校专科生、本科生、研究生&#xff0c;每组参赛人数为1-3人&#xff08;指导老师不…

第3届图像处理与媒体计算国际会议(ICIPMC 2024)即将召开!

2024年第3届图像处理与媒体计算国际会议&#xff08;ICIPMC2024&#xff09;将于2024年5月17-19日在中国合肥举行。本次大会由安徽大学、西北工业大学&#xff0c;西北大学和IEEE联合主办。ICIPMC 2024旨在汇集该领域领先的学术科学家、研究人员和学者&#xff0c;并进行交流和…

虚拟游戏理财【华为OD机试-JAVAPythonC++JS】

题目描述 题目描述&#xff1a; 在一款虚拟游戏中生活&#xff0c;你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank&#xff0c;它提供有若干理财产品m&#xff0c;风险及投资回报不同&#xff0c;你有N&#xff08;元&#xff09;进行投资&#xff0c;能…

理解计算着色器中glsl语言的内置变量

概要 本文通过示例的方式&#xff0c;着重解释以下几个内置变量&#xff1a; gl_WorkGroupSizegl_NumWorkGroupsgl_LocalInvocationIDgl_WorkGroupIDgl_GlobalInvocationID 基本概念 局部工作组与工作项 一个3x2x1的局部工作组示例如下&#xff0c;每个小篮格子表示一个工作项…

Node.js中的并发和多线程处理

在Node.js中&#xff0c;处理并发和多线程是一个非常重要的话题。由于Node.js是单线程的&#xff0c;这意味着它在任何给定时间内只能执行一个任务。然而&#xff0c;Node.js的事件驱动和非阻塞I/O模型使得处理并发和多线程变得更加高效和简单。在本文中&#xff0c;我们将探讨…