当前位置: 首页 > news >正文

实现表格合并

  <template><div class="table-merge-example"><h2 class="title">Vue2 表格数据合并示例</h2><div class="table-container"><h3>横向合并(列合并)</h3><table class="merge-table horizontal-merge"><thead><tr><th>数值</th></tr></thead><tbody><tr v-for="(item, index) in processedHorizontalData" :key="index"><td :colspan="item.span" :class="{ 'merged-cell': item.span > 1 }">{{ item.value }}</td></tr></tbody></table></div><div class="table-container"><h3>纵向合并(行合并)</h3><table class="merge-table vertical-merge"><thead><tr><th>序号</th><th>数值</th></tr></thead><tbody><tr v-for="(item, index) in originalData" :key="index"><td>{{ index + 1 }}</td><td :rowspan="verticalSpans[index]" :class="{ 'merged-cell': verticalSpans[index] > 1 }"v-if="verticalSpans[index] > 0">{{ item }}</td></tr></tbody></table></div></div></template><script>export default {data() {return {originalData: [200, 300, 300, 300, 400, 400, 500],processedHorizontalData: [],verticalSpans: []};},mounted() {this.processHorizontalMerge();this.processVerticalMerge();},methods: {// 处理横向合并(列合并)processHorizontalMerge() {if (this.originalData.length === 0) {return;}const result = [];let currentValue = this.originalData[0];let count = 1;// 从第二个元素开始遍历for (let i = 1; i < this.originalData.length; i++) {if (this.originalData[i] === currentValue) {count++;} else {// 保存当前组result.push({ value: currentValue, span: count });// 开始新的一组currentValue = this.originalData[i];count = 1;}}// 添加最后一组result.push({ value: currentValue, span: count });this.processedHorizontalData = result;},// 处理纵向合并(行合并)processVerticalMerge() {if (this.originalData.length === 0) {return;}const spans = new Array(this.originalData.length).fill(0);let currentValue = this.originalData[0];let count = 1;spans[0] = 1;// 从第二个元素开始遍历for (let i = 1; i < this.originalData.length; i++) {if (this.originalData[i] === currentValue) {count++;spans[i] = 0; // 被合并的单元格} else {// 设置上一组的合并数量spans[i - count] = count;// 开始新的一组currentValue = this.originalData[i];count = 1;spans[i] = 1;}}// 设置最后一组的合并数量spans[this.originalData.length - count] = count;this.verticalSpans = spans;}}};</script><style scoped>.table-merge-example {max-width: 800px;margin: 20px auto;padding: 20px;font-family: Arial, sans-serif;}.title {text-align: center;color: #333;margin-bottom: 30px;}.table-container {margin-bottom: 40px;border: 1px solid #e0e0e0;border-radius: 6px;padding: 15px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}.table-container h3 {color: #444;margin-top: 0;margin-bottom: 15px;padding-bottom: 10px;border-bottom: 1px solid #eee;}.merge-table {width: 100%;border-collapse: collapse;text-align: center;}.merge-table th,.merge-table td {padding: 12px 15px;border: 1px solid #ddd;}.merge-table th {background-color: #f5f5f5;font-weight: bold;color: #555;}.merge-table tr:nth-child(even) {background-color: #f9f9f9;}.merge-table tr:hover {background-color: #f0f7ff;}.merged-cell {background-color: #e6f7ff;font-weight: bold;color: #1890ff;}.horizontal-merge td {border-right: 2px solid #fff;}.vertical-merge td {border-bottom: 2px solid #fff;}</style>
http://www.rkmt.cn/news/46218.html

相关文章:

  • 2025.11.11
  • 基于ITIL流程的ITSM平台对比选型:如何选择最贴合自身需求、能真正落地ITIL价值的ITSM工具?
  • 支付宝对接问题归类
  • 详细介绍:.net AI MCP 入门 适用于模型上下文协议的 C# SDK 简介(MCP)
  • Topaz Video AI v1.0.5高级版:视频修复黑科技
  • 一根网线同时接网线和电话线方法
  • 2025年重庆抖音推广公司口碑排行榜前十强发布
  • AI是风口还是泡沫?一个独立开发者的冷思考
  • 详解 “增益”:从基础概念到电子测量应用
  • springboot集成qq邮箱发送邮件
  • CentOS安装JAVA环境
  • 第11周 预习、实验与作业:流与文件
  • 2025年衡水出租救护车公司权威推荐榜单:长途救护车出租/跨省救护车出租/市内救护车出租服务公司精选
  • 嵌入式系统的LCD多级菜单显示实现
  • 第五届算法、高性能计算与人工智能国际学术会议(AHPCAI 2025)
  • .在线调试快递
  • 详细介绍:【 苍穹外卖day6 | 微信小程序 】
  • 2025年电线电缆厂权威推荐榜单:亚洲电缆/阻燃电缆/光伏电缆源头厂家精选
  • 平面最近对(p1429)
  • 用Jmeter向测试接口发送快递查询请求
  • 五城渠道招商会圆满收官,纷享销客全国生态布局再提速!
  • 在JMeter中查询天气和快递
  • 快递查询,-jmeter
  • 2025年防爆正压柜厂家权威推荐榜单:防爆正压箱/粉尘防爆柜/防爆正压型小屋源头厂家精选
  • 2025年靠谱的加热器厂家最新权威推荐排行榜
  • java-基础-内存查看
  • 2025年评价高的打浆机折叠款行业内口碑厂家排行榜
  • Redis终极面试题:从基础到原理,从概念到实战的10道“必杀题”
  • 2025年11月数控加工中心推荐:知名厂家榜与口碑评价对比指南
  • 2025年口碑好的海绵吸盘热门厂家推荐榜单