elementui按照数据源动态合并单元格示例
elementui按照数据源动态合并单元格示例,直接js操作dom执行合并
合并前效果
合并后效果
<link href="https://unpkg.com/element-ui@2.15.13/lib/theme-chalk/index.css" rel="stylesheet" type="text/css" /> <div id="app"> <template> <div> <el-table ref="mytable" :data="tableData" border style="width: 100%; margin-top: 20px"> <el-table-column prop="no" label="序号" width="180"> </el-table-column> <el-table-column prop="type" label="故障类别"> </el-table-column> <el-table-column prop="num" label="合计件数"> </el-table-column> <el-table-column label="按版本故障件数统计" align="center"> <el-table-column prop="version" label="版本"> </el-table-column> <el-table-column prop="vnum" label="件数"> </el-table-column> </el-table-column> </el-table> </div> </template> </div> <script src="https://unpkg.com/vue@2/dist/vue.js"></script> <script src="https://unpkg.com/element-ui@2.15.13/lib/index.js"></script> <script>total=0 var Main = { data() { return { tableData: [] }; }, mounted() { //ajax模拟 setTimeout(() => { let leftData = [{ type: '原因不明', num: 1 }, { type: '信号原因', num: 33 }, { type: '未知', num: 17 },]; let rightData = { 原因不明: [{ num: 1, type: 'V1.01.010' }], 信号原因: [{ num: 15, type: 'V1.01.010' }, { num: 6, type: 'V1.01.009' }, { num: 12, type: '未知' }], 未知: [{ num: 3, type: 'V1.01.010' }, { num: 14, type: 'V1.01.008.2' }], } let data = [] leftData.forEach((ld, no) => { ld.no = no + 1;//序号 rightData[ld.type].forEach(rd => { rd.version = rd.type;//更改右边数据type属性为version属性 rd.vnum = rd.num;//同理 //左边和右边合并后加入数组 data.push({ ...rd, ...ld }) }) }); this.tableData = data; return this.$nextTick(() => { let rows = this.$refs.mytable.$el.querySelectorAll('tr.el-table__row'); let cellCount = 3;//前3列合并 let rowCount = rows.length; let removeTds = [];//合并后被删除的td集合 for (let col = 0; col < cellCount; col++) { let rowSpan = 1, row, startTRIndex = 0; for (row = 1; row < rowCount ; row++) { if (rows[row - 1].cells[col].innerText.trim() != rows[row].cells[col].innerText.trim()) { if (rowSpan > 1) { rows[startTRIndex].cells[col].rowSpan = rowSpan;//跨行合并 //删除单元格 for (let j = row - 1; j > startTRIndex; j--) { removeTds.push(rows[j].cells[col]); } } rowSpan = 1; startTRIndex = row; } else rowSpan++; } if (rowSpan > 1) { rows[startTRIndex].cells[col].rowSpan = rowSpan;//最后一个单元格 //删除单元格 for (let j = row - 1; j > startTRIndex; j--) { removeTds.push(rows[j].cells[col]); } } } for (let td of removeTds)td.parentNode.removeChild(td) }) }, 200) } }; var Ctor = Vue.extend(Main) new Ctor().$mount('#app') </script>
加支付宝好友偷能量挖...
原创文章,转载请注明出处:elementui按照数据源动态合并单元格示例