vue element table表格相同名稱列合并方式
element table表格相同名稱列合并
<template> <div> <el-table show-summary :summary-method="getSummaries" :span-method="objectSpanMethod" :data="tableData" row-key="id" ref="tableDom" border> <el-table-column label="序號(hào)" width="55" align="center"> <template slot-scope="scope">{{ scope.$index + 1 }}</template> </el-table-column> <el-table-column prop="name" label="分類" align="center"></el-table-column> <el-table-column prop="num1" label="數(shù)量1" align="center"></el-table-column> <el-table-column prop="num2" label="數(shù)量2" align="center"></el-table-column> <el-table-column prop="num3" label="數(shù)量3" align="center"></el-table-column> <el-table-column prop="type" label="類型" align="center"></el-table-column> <el-table-column prop="num4" label="數(shù)量4" align="center"></el-table-column> <el-table-column prop="num5" label="數(shù)量5" align="center"></el-table-column> </el-table> </div> </template> <script> export default { name: '', components: {}, props: {}, data() { return { tableData: [{ name: '名稱1', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }, { name: '名稱2', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }, { name: '名稱2', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }, { name: '名稱3', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }, { name: '名稱4', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }, { name: '名稱4', num1: '2', num2: '3', num3: '4', num4: '連續(xù)', num5: '6', num6: '7', }] } }, filters: {}, computed: {}, watch: {}, created() {}, mounted() {}, beforeDestroy() {}, methods: { // 合計(jì) getSummaries (param) { const { columns, data } = param const sums = [] columns.forEach((column, index) => { if (index === 0) { sums[index] = '合計(jì)' } else if (index === 2 || index === 7) { const values = data.map(item => Number(item[column.property])) if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr) if (!isNaN(value)) { return prev + curr } else { return prev } }, 0) } else { sums[index] = '' } } else { sums[index] = '' } }) return sums }, // table合并列 objectSpanMethod({ row, column, rowIndex, columnIndex }) { let data = this.tableData; //拿到當(dāng)前table中數(shù)據(jù) let cellValue = row[column.property]; //當(dāng)前位置的值 let noSortArr = ['num1', 'num2', 'num3', 'num4', 'num5', 'num6']; //不需要合并的字段(不進(jìn)行合并行的prop) if (cellValue && !noSortArr.includes(column.property)) { let prevRow = data[rowIndex - 1]; //獲取到上一條數(shù)據(jù) let nextRow = data[rowIndex + 1]; //下一條數(shù)據(jù) if (prevRow && prevRow[column.property] === cellValue) { //當(dāng)有上一條數(shù)據(jù),并且和當(dāng)前值相等時(shí) return { rowspan: 0, colspan: 0 }; } else { let countRowspan = 1; while (nextRow && nextRow[column.property] === cellValue) { //當(dāng)有下一條數(shù)據(jù)并且和當(dāng)前值相等時(shí),獲取新的下一條 nextRow = data[++countRowspan + rowIndex]; } if (countRowspan > 1) { return { rowspan: countRowspan, colspan: 1 }; } } } }, } } </script> <style scoped lang="less"> </style>
對(duì)table表格相同內(nèi)容行的合并
在vue開發(fā)中會(huì)有對(duì)表格的操作,有時(shí)因?yàn)樾枰闅v的情況不同,對(duì)于數(shù)據(jù)相同行處理時(shí),使用element的table不太好實(shí)現(xiàn),還是使用html的table標(biāo)簽!
而此時(shí),對(duì)于相同數(shù)據(jù)行,使用rowspan進(jìn)行合并則無法更好的遍歷數(shù)據(jù),比如我們要實(shí)現(xiàn)這樣的表格
數(shù)據(jù)格式一看,使用遍歷的話會(huì)更好實(shí)現(xiàn),這個(gè)時(shí)候表格是這樣的
這個(gè)時(shí)候可以使用方法獲取相同內(nèi)容行,對(duì)其進(jìn)行處理,方法如下
mergeTable() { //table表合并相同內(nèi)容的行 var tab = document.getElementById("subtable"); var maxCol = 3, val, count, start; // var ys = ""; for (var col = maxCol - 1; col >= 0 ; col--) { count = 1; val = ""; for (var i = 0; i < tab.rows.length; i++) { if (val == tab.rows[i].cells[col].innerHTML) { count++; } else { if (count > 1) { //合并 start = i - count; tab.rows[start].cells[col].rowSpan = count; for (var j = start + 1; j < i; j++) { // tab.rows[j].cells[col].style.display = "none"; tab.rows[j].removeChild(tab.rows[j].cells[col]); } count = 1; } val = tab.rows[i].cells[col].innerHTML; } } if (count > 1) { //合并,最后幾行相同的情況下 start = i - count; tab.rows[start].cells[col].rowSpan = count; for (var j = start + 1; j < i; j++) { tab.rows[j].removeChild(tab.rows[j].cells[col]); } } } }
然后在生命周期函數(shù)這調(diào)用該方法即可實(shí)現(xiàn)對(duì)相同內(nèi)容行的合并操作!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
uniapp實(shí)現(xiàn)紅包動(dòng)畫效果代碼實(shí)例(vue3)
uniapp作為一種基于Vue.js的前端框架,實(shí)現(xiàn)了一套代碼多端運(yùn)行的理念,成為了眾多開發(fā)者的首選,下面這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)紅包動(dòng)畫效果的相關(guān)資料,需要的朋友可以參考下2024-01-01vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出)
這篇文章主要介紹了vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07如何使用 vue-cli 創(chuàng)建模板項(xiàng)目
這篇文章主要介紹了如何使用 vue-cli 創(chuàng)建模板項(xiàng)目,幫助大家更好的理解和學(xué)習(xí)vue框架的知識(shí),感興趣的朋友可以了解下2020-11-11vue-router報(bào)錯(cuò):uncaught error during route 
這篇文章主要介紹了vue-router報(bào)錯(cuò):uncaught error during route navigati問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06解決vue-cli + webpack 新建項(xiàng)目出錯(cuò)的問題
下面小編就為大家分享一篇解決vue-cli + webpack 新建項(xiàng)目出錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03vue中Npm run build 根據(jù)環(huán)境傳遞參數(shù)方法來打包不同域名
這篇文章主要介紹了vue項(xiàng)目中Npm run build 根據(jù)環(huán)境傳遞參數(shù)方法來打包不同域名,使用npm run build --xxx,根據(jù)傳遞參數(shù)xxx來判定不同的環(huán)境,給出不同的域名配置,具體內(nèi)容詳情大家參考下本文2018-03-03