• 对el-table表格的表头操作


     效果1:单层表头合并

    图示1:

     说明:

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

    代码:

    1. <script>
    2. export default {
    3. data() {
    4. return {
    5. tableData: [
    6. {
    7. name: "孙悟空",
    8. age: 500,
    9. home: "花果山水帘洞",
    10. hobby: "大闹天宫",
    11. },
    12. {
    13. name: "猪八戒",
    14. age: 88,
    15. home: "高老庄",
    16. hobby: "吃包子",
    17. },
    18. {
    19. name: "沙和尚",
    20. age: 1000,
    21. home: "通天河",
    22. hobby: "游泳",
    23. },
    24. {
    25. name: "唐僧",
    26. age: 99999,
    27. home: "东土大唐",
    28. hobby: "取西经",
    29. },
    30. ],
    31. };
    32. },
    33. methods: {
    34. headerCellStyle({ row, column, rowIndex, columnIndex }) {
    35. // 第一步:设置表头的第0列暂不操作,将地1列和第2列隐去使其消失
    36. if ((columnIndex == 1) | (columnIndex == 2)) {
    37. return { display: "none" };
    38. }
    39. // 第二步, 由于1、2列没有了,后续列就会贴上来(后续列往左错位问题)
    40. if ((rowIndex == 0) & (columnIndex == 0)) {
    41. // 解决后续列错位问题,就是将隐去的第1、2列的位置再补上,通过第0列来补
    42. this.$nextTick(() => {
    43. // 原来第0列只占据一个位置,现在要去占据三个位置。即占据三列,即设置为横向三个单元格
    44. document.querySelector(`.${column.id}`).setAttribute("colspan", "3");
    45. // 这里的column.id实际是dom元素的class,故用点.不用井#,可审查dom验证
    46. // 通过设置原生的colspan属性,让原来的第一列只占据一个单元格的表头占据3个单元格即可
    47. });
    48. }
    49. },
    50. },
    51. };
    52. script>
    53. <style lang="less">
    54. .el-table {
    55. th {
    56. font-weight: bold;
    57. color: #333;
    58. }
    59. }
    60. style>

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

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

    图示2:

    代码:

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

    图示3:

    代码:

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

    图示4:

    代码:

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

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

    图示1:

    说明: 

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

    代码:

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

    1. <template>
    2. <el-table
    3. :data="tableData"
    4. border
    5. style="width: 600"
    6. :header-cell-style="headerCellStyle"
    7. >
    8. <el-table-column prop="name" label="姓名" width="150" align="center">
    9. <el-table-column
    10. prop="name"
    11. label="三列基础信息"
    12. width="150"
    13. align="center"
    14. >el-table-column>
    15. el-table-column>
    16. <el-table-column prop="name" label="年龄" width="150" align="center">
    17. <el-table-column
    18. prop="age"
    19. label="年龄"
    20. width="150"
    21. align="center"
    22. >el-table-column>
    23. el-table-column>
    24. <el-table-column prop="name" label="家乡" width="150" align="center">
    25. <el-table-column
    26. prop="home"
    27. label="家乡"
    28. width="150"
    29. align="center"
    30. >el-table-column>
    31. el-table-column>
    32. <el-table-column
    33. prop="hobby"
    34. label="爱好"
    35. width="150"
    36. align="center"
    37. >el-table-column>
    38. el-table>
    39. template>

    js部分:

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

    图示2:

    代码:

    html部分

    js部分:

    • 还可以,直接通过column.label找到对应单元格,然后进行合并单元格操作,不使用rowIndex和columnIndex了
    • 这种方式,在某些情况下,会更加方便
    • 但无论哪种方式,本质思路都是先找到单元格,再进行合并相关操作
    1. headerCellStyle({ row, column, rowIndex, columnIndex }) {
    2. // 第一部分的合并
    3. if (column.label == "年龄") {
    4. return { display: "none" };
    5. }
    6. if (column.label == "家乡") {
    7. return { display: "none" };
    8. }
    9. if (column.label == "基本信息(姓名、年龄、家乡)") {
    10. this.$nextTick(() => {
    11. document.querySelector(`.${column.id}`).setAttribute("colspan", "3");
    12. });
    13. return { background: "pink" };
    14. }
    15. // 第二部分的合并
    16. if (column.label == "性格") {
    17. return { display: "none" };
    18. }
    19. if (column.label == "爱好&性格") {
    20. this.$nextTick(() => {
    21. document.querySelector(`.${column.id}`).setAttribute("colspan", "2");
    22. });
    23. return { background: "orange" };
    24. }
    25. },

  • 相关阅读:
    C语言回顾(修饰词篇)
    python 设置Pyplot的动态rc参数、绘图的填充
    Git工具的学习
    ES6中const注意点
    什么函数不能是虚函数?为什么析构必须是虚函数?
    凸面镜反射场景无监督域适应语义分割的一些问题
    《CRFL:Certifiably Robust Federated Learning against Backdoor Attacks》
    python | xlsxwriter,一个实用的 Python 库!
    【赠书活动】浅谈C#中垃圾回收机制
    2022.12.4 学习周报
  • 原文地址:https://blog.csdn.net/m0_63026408/article/details/136365946