在vue中通过js动态绘制table,并且合并连续相同内容的行

news2024/12/29 10:16:02

首先是vue代码

<template>
  <div id="body-container"
       style="position: absolute">

    <div class="box-container">
      <div class="lsb-table-box" >
        <div class="table-container" id="lsb-table">
        </div>
      </div>
    </div>
  </div>

</template>

然后是js方法

/**
 * 渲染表格
 */
function tableRenderCs() {

    const data=[{
        "one": "测试1",
        "two": "测试2",
        "three": "测试3",
        "four": "测试4",
        "five": "测试5",
        "six": "测试6",
        "seven": "测试7",
        "eight": "测试8",
        "nine": "测试9"
    },{
        "one": "测试1",
        "two": "测试2",
        "three": "测试3",
        "four": "测试4",
        "five": "测试5",
        "six": "测试6",
        "seven": "测试7",
        "eight": "测试8",
        "nine": "测试9"
    },{
        "one": "测试1",
        "two": "测试2",
        "three": "测试3",
        "four": "测试4",
        "five": "测试5",
        "six": "测试6",
        "seven": "测试7",
        "eight": "测试8",
        "nine": "测试9"
    }]

    let html = '<table class="table-wj JZ-A" border="1" cellspacing="0">' +
        '<thead>' +
        '<tr>' +
        '<th rowspan="2" colspan="3">第一列</th>' +
        '<th rowspan="2" colspan="1" style="width: 50px;">第二列</th>' +
        '<th rowspan="2" colspan="1" style="width: 100px;">第三列</th>' +
        '<th rowspan="2" colspan="1" style="width: 50px;">第四列</th>' +
        '<th rowspan="2" colspan="1" style="width: 80px;">第五列</th>' +
        '<th rowspan="1" colspan="3">第六列</th>' +
        '</tr>' +
        '<tr>' +
        '<th colspan="1" style="width: 50px;">第六列的第一列</th>' +
        '<th colspan="1" style="width: 90px;">第六列的第二列</th>' +
        '</tr>' +
        '</thead>' +
        '<tbody>';

    for (let i = 0; i < data.length; i++) {
        const item = data[i];

        html +=
            `<tr>` +
            `<td>${item.one}</td>` +
            `<td>${item.two}</td>` +
            `<td>${item.three}</td>` +
            `<td>${item.four}</td>` +
            `<td>${item.five}</td>` +
            `<td>${item.six}</td>` +
            `<td>${item.seven}</td>` +
            `<td>${item.eight}</td>` +
            `<td>${item.nine}</td>` +
            `</tr>`;
    }

    html += '</tbody></table>';

    let _$ = $(".lsb-table-box .table-container");
    _$.append(html);

    mergeColumns();//调用合并表格方法
}

/**
 * 执行合并逻辑
 */
function mergeColumns() {
    let $table = $('table.table-wj');
    let $rows = $table.find('tbody tr');

	const numCols = $rows.eq(0).find('td').length;//考虑全部列
    //const numCols = Math.min(3, $rows.eq(0).find('td').length); // 仅考虑前三列

    // 遍历每列
    for (let col = 1; col <= numCols; col++) {
        let $currentColumn = $table.find(`td:nth-child(${col})`);
        let prevContent = null;
        let rowspan = 1;

        for (let i = 0; i < $currentColumn.length; i++) {
            let $currentCell = $($currentColumn[i]);
            let currentContent = $currentCell.text();

            if (currentContent === prevContent) {
                rowspan++;
                $currentCell.addClass('hidden');
            } else {
                if (rowspan > 1) {
                    $currentColumn.eq(i - rowspan).attr('rowspan', rowspan);
                }
                prevContent = currentContent;
                rowspan = 1;
            }
        }

        if (rowspan > 1) {
            $currentColumn.eq($currentColumn.length - rowspan).attr('rowspan', rowspan);
        }
    }

    // 清除被隐藏的单元格
    $table.find('.hidden').remove();
}

const numCols这里给出了两种合并表格的逻辑,第一个是只会对前三列执行合并逻辑,而第二个会对所有列执行合并逻辑。下面是两种逻辑的合并效果图。
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP-PhpSpreadsheet导出带图片方法

需求描述 导出表格&#xff0c;项目名称对应项目详情页面二维码。 实现方法 1&#xff0c;先将各个项目生成的二维码存放到了一个指定目录里面&#xff1b; 2&#xff0c;导出数据到excel表格 <?phpuse PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpread…

大气污染扩散模型Calpuff丨Calmet气象模块、Calpost后处理模块、Post Tools后处理工具及绘图工具等

目录 第一章 Calpuff基础知识 第二章 数据预处理 第三章 Calmet气象模块 第四章 Calpuff模块 第五章 Calpost后处理模块 第六章 Post Tools后处理工具及绘图工具 更多应用 Calpuff模型是一种三维非稳态拉格朗日扩散模型&#xff0c;可有效地处理非稳态&#xff08;如&am…

梯形加减速点动功能块(SMART PLC梯形图)

博途PLC的梯形加减速点动功能块算法和源代码介绍请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/133185836https://rxxw-control.blog.csdn.net/article/details/133185836 1、梯形加减速速度曲线 2、梯形加减速点动功能块 3、接口定义

使用GPU利用ffmpeg-在Pyhton代码中实现视频转码到MP4格式的过程记录【失败告终-原因是显示型号太老不支持】

01-安装Nvida的显卡驱动和CUDA 参考文章 https://blog.csdn.net/wenhao_ir/article/details/125253533 进行安装。 02-下载ffmpeg的可执行文件 下载ffmpeg的Windows可执行文件&#xff0c;下载页面&#xff1a; https://www.gyan.dev/ffmpeg/builds/#release-builds 我在202…

【MyBatis Plus】逻辑删除、分页、乐观锁的应用及讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…

Pipeline 助您轻松驾驭海量数据!

前言 数据治理在当今信息时代变得至关重要。随着数据量的不断增长和多样化&#xff0c;组织需要有效地管理和利用这些数据&#xff0c;以支持业务决策和创新发展。不论是做数据分析还是数据解析&#xff0c;利用 Pipeline 可以帮助组织实现数据治理的自动化和规范化&#xff1…

Ubuntu 20.04 prometheus prometheus-process-exporter

prometheus-process-exporter 监控系统架构方案 https://blog.csdn.net/weixin_45801289/article/details/126922395 sudo apt install prometheus-process-exporter prometheus-process-exporter_0.4.0ds-1_amd64.deb service prometheus-process-exporter status netstat …

【数据结构和算法】移动零

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;双指针 2.2 方法二&#xff1a;两次遍历 2.3 方法三&#xff1a;一次遍历 三、…

vue_域名部署无法访问后端

前言 目前部署的比较另类&#xff0c;因为服务器为windows&#xff0c;目前还不是很会nginx&#xff0c;所以现在就只能在服务器上安装nodejs&#xff0c;然后直接使用npm run dev命令行的方式运行项目 遇到的坑 使用ip访问前端的时候&#xff0c;就可以访问&#xff0c;但是…

户外用品网站搭建的效果如何

近几年户外运动成为热门话题&#xff0c;户外装备品牌也逐渐出现在人们眼前&#xff0c;新老企业都在用自己的方式提升品牌形象&#xff0c;包括帐篷、登山用具、钓鱼品、滑雪品等&#xff0c;在市场都有很高需求。 而在实际经营中&#xff0c;户外用品品牌也面临一些难题&…

【postgresql】PSQLException: An I/O error occurred while sending to the backend.

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend. 发送到后端时发生I/O错误。 java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 34284 尝试将超出范围的整数作为2字节值发送&#xff1a;34284 pos…

基于单片机的视力保护及身姿矫正器设计(论文+源码)

1. 系统设计 在本次设计中&#xff0c;其系统整个框图如图2-1所示。其主要的核心控制模块由超声波模块&#xff0c;光敏电阻&#xff0c;按键模块&#xff0c;复位电路&#xff0c;红外模块&#xff0c;LCD显示等组成。其包括自动模式&#xff0c;手动模式。自动模式&#xff…

天猫数据分析-天猫查数据软件-11月天猫平台饮料市场品牌及店铺销量销额数据分析

今年以来&#xff0c;饮料是快消品行业中少数保持稳定增长的品类之一。 11月份&#xff0c;饮料市场同样呈现较好的增长态势。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年11月份&#xff0c;天猫平台上饮料市场的销量为2700万&#xff0c;环比增长约42%&#xf…

Linux本地搭建StackEdit Markdown编辑器结合内网穿透实现远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

CentOS7安装Docker及添加阿里云镜像加速详细教程

Docker官方安装教程网站&#xff1a;Install Docker Engine on CentOS | Docker Docs 具体流程如下&#xff1a; 1.确定你是CentOS7及以上版本 cat /etc/redhat-release 2.yum安装gcc相关 yum -y install gcc yum -y install gcc-c 3.安装需要的软件包 3.1安装docker引擎…

Python:发送qq邮箱只需几行代码轻松搞定

一、前言 在日常业务中&#xff0c;经常会遇到需要程序发邮件提醒自己的情况。例如数据异常、工作任务进度完成情况、今日天气、今日股票行情等各种场景。如果引入发送邮箱以推进预期进度的功能&#xff0c;那将大大优化我们的日常。我也是近期在写国债逆回购的监控脚本时想起…

chatchat知识库对话接口修改成sse流式输出方案

在chatchat结合chatGLM搭建的私有化知识库中&#xff0c;使用原生的webUI画面是可以流式输出的&#xff0c;而直接调用api接口&#xff0c;不管stream为true还是false&#xff0c;都是阻塞式输出的&#xff0c;也就是一口气返回给接口。 我们的解决方案是修改StreamingRespons…

32位MCU极致性价比高速风筒方案特点--【其利天下技术】

近年来&#xff0c;伴随着人们消费升级及现代工业技术水平的提升&#xff0c;电吹风市场已经步入了绿色节能、高效多功能化的发展阶段。人们对电吹风的需求和要求都在不断增加。然而&#xff0c;传统电吹风采用交流电机&#xff0c;使用寿命有限&#xff0c;维护不方便&#xf…

C++1114新标准——Lambdas,decltype

系列文章目录 C11&14新标准——Variadic templates&#xff08;数量不定的模板参数&#xff09; C11&14新标准——Uniform Initialization&#xff08;统一初始化&#xff09;、Initializer_list&#xff08;初始化列表&#xff09;、explicit C11&14新标准—— d…

【Python数据分析系列】一文搞懂二维数组中的排列组合(案例源码)

一、问题场景 在工作中&#xff0c;我们经常会碰到这样的问题场景&#xff0c;有一个4行5列的二维数组&#xff08;4个波段&#xff0c;5个采样点&#xff09;&#xff0c;一行&#xff08;一个一维数组&#xff09;代表一个波段&#xff0c;我想知道数组中任意两个波段的差&am…