日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

el-table表格動態合并相同數據單元格(可指定列+自定義合并)

瀏覽:32日期:2022-06-12 14:16:14
目錄1.固定合并2. 動態合并相同數據單元格(所有列)3. 動態合并相同數據單元格(指定列)4. 動態合并相同數據單元格(指定列+合并條件)完整代碼1.固定合并官方挺提供的合并具體某行列的方法:el-table合并行或列通過給table傳入span-method方法可以實現合并行或列,方法的參數是一個對象,里面包含當前行row、當前列column、當前行號rowIndex、當前列號columnIndex四個屬性。

該函數可以返回一個包含兩個元素的數組,第一個元素代表rowspan,第二個元素代表colspan。 也可以返回一個鍵名為rowspan和colspan的對象。

<template> <div> <el-table :data='tableData' :span-method='arraySpanMethod' border style='width: 100%'> <el-table-columnprop='id'label='ID'width='180'> </el-table-column> <el-table-columnprop='name'label='姓名'> </el-table-column> <el-table-columnprop='amount1'sortablelabel='數值 1'> </el-table-column> <el-table-columnprop='amount2'sortablelabel='數值 2'> </el-table-column> <el-table-columnprop='amount3'sortablelabel='數值 3'> </el-table-column> </el-table> <el-table :data='tableData' :span-method='objectSpanMethod' border style='width: 100%; margin-top: 20px'> <el-table-columnprop='id'label='ID'width='180'> </el-table-column> <el-table-columnprop='name'label='姓名'> </el-table-column> <el-table-columnprop='amount1'label='數值 1(元)'> </el-table-column> <el-table-columnprop='amount2'label='數值 2(元)'> </el-table-column> <el-table-columnprop='amount3'label='數值 3(元)'> </el-table-column> </el-table> </div></template><script> export default { data() { return {tableData: [{ id: '12987122', name: '王小虎', amount1: '234', amount2: '3.2', amount3: 10}, { id: '12987123', name: '王小虎', amount1: '165', amount2: '4.43', amount3: 12}, { id: '12987124', name: '王小虎', amount1: '324', amount2: '1.9', amount3: 9}, { id: '12987125', name: '王小虎', amount1: '621', amount2: '2.2', amount3: 17}, { id: '12987126', name: '王小虎', amount1: '539', amount2: '4.1', amount3: 15}] }; }, methods: { arraySpanMethod({ row, column, rowIndex, columnIndex }) {if (rowIndex % 2 === 0) { if (columnIndex === 0) { return [1, 2]; } else if (columnIndex === 1) { return [0, 0]; }} }, objectSpanMethod({ row, column, rowIndex, columnIndex }) {if (columnIndex === 0) { if (rowIndex % 2 === 0) { return { rowspan: 2, colspan: 1 }; } else { return { rowspan: 0, colspan: 0 }; }} } } };</script>

運行效果:

缺點:這種只適合寫死的數據和固定的表格行列,無法動態判斷單元格數據是否相等再合并;

2. 動態合并相同數據單元格(所有列)可以對所有相同數據的列,進行動態合并此方法適合需要合并所有的相同數據的單元格<template> <div> <el-table :data='tableData' :span-method='objectSpanMethod' border :header-cell-style='{ textAlign: 'center', backgroundColor: '#F5F7FA' }' > <el-table-column prop='School' label='學校' align='center'> </el-table-column> <el-table-column prop='Grade' label='年級' /> <el-table-column prop='Class' label='班級' /> <el-table-column prop='Name' label='姓名' /> <el-table-column prop='Chinese' label='語文' /> <el-table-column prop='Math' label='數學' /> <el-table-column prop='English' label='英語' /> </el-table> </div></template><script>export default { data() { return { // 存放所有的表頭 一定要與tableData一致 colFields: ['School','Grade','Class','Name','Chinese','Math','English', ], spanArr: [], //存儲合并單元格的開始位置 // 表格數據 tableData: [// 一年級{ School: '第一小學', Grade: '1年級', Class: '1班', Name: '張三', Chinese: '90', Math: '100', English: '80',},{ School: '第一小學', Grade: '1年級', Class: '2班', Name: '李四', Chinese: '90', Math: '85', English: '80',},{ School: '第一小學', Grade: '1年級', Class: '3班', Name: '王五', Chinese: '79', Math: '100', English: '80',},// 二年級{ School: '第一小學', Grade: '2年級', Class: '1班', Name: '趙六', Chinese: '95', Math: '100', English: '80',},{ School: '第一小學', Grade: '2年級', Class: '2班', Name: '錢八', Chinese: '98', Math: '85', English: '80',},{ School: '第一小學', Grade: '2年級', Class: '3班', Name: '陳九', Chinese: '79', Math: '100', English: '80',},// 三年級{ School: '第一小學', Grade: '3年級', Class: '1班', Name: '黃十', Chinese: '91', Math: '88', English: '80',},{ School: '第一小學', Grade: '3年級', Class: '2班', Name: '魏一', Chinese: '90', Math: '86', English: '87',},{ School: '第一小學', Grade: '3年級', Class: '3班', Name: '楊二', Chinese: '79', Math: '99', English: '80',}, ], }; }, methods: { /** * 分析每一列,找出相同的 * @param data */ getSpanArr() { for (let i = 0; i < this.tableData.length; i++) {let row = i;// let col = i % this.colCount;if (row === 0) { // i 表示行 j表示列 for (let j = 0; j < this.colFields.length; j++) { this.spanArr[i * this.colFields.length + j] = { rowspan: 1, colspan: 1, }; }} else { for (let j = 0; j < this.colFields.length; j++) { // 當前和上一次的一樣 // 1. 合并所有列的相同數據單元格 if ( this.tableData[row][this.colFields[j]] === this.tableData[row - 1][this.colFields[j]] ) { let beforeItem =this.spanArr[(row - 1) * this.colFields.length + j]; this.spanArr[row * this.colFields.length + j] = {rowspan: 1 + beforeItem.rowspan, // 合并幾行colspan: 1, // 合并幾列,我這里只是跨行合并,不跨列合并,所以用的1 }; beforeItem.rowspan = 0; beforeItem.colspan = 0; } else { // rowspan 和 colspan 都為1表格此單元格不合并 this.spanArr[row * this.colFields.length + j] = {rowspan: 1,colspan: 1, }; } }} } // 對數據進行倒序 let stack = []; for (let i = 0; i < this.colFields.length; i++) {for (let j = 0; j < this.tableData.length; j++) { // console.log('i=' + i + ' j=' + j); // i 表示列 j表示行 if (j === 0) { if (this.spanArr[j * this.colFields.length + i].rowspan === 0) { stack.push(this.spanArr[j * this.colFields.length + i]); } } else { if (this.spanArr[j * this.colFields.length + i].rowspan === 0) { stack.push(this.spanArr[j * this.colFields.length + i]); } else { stack.push(this.spanArr[j * this.colFields.length + i]); while (stack.length > 0) {let pop = stack.pop();let len = stack.length;this.spanArr[(j - len) * this.colFields.length + i] = pop; } } }} } // console.log(this.spanArr); }, objectSpanMethod({ row, column, rowIndex, columnIndex }) { // console.log(this.spanArr[rowIndex * this.colFields.length + columnIndex]); return this.spanArr[rowIndex * this.colFields.length + columnIndex]; }, }, mounted() { this.getSpanArr(); },};</script><style lang='scss' scoped></style>

效果:

我們可以看到,所有列,只要數據相同的單元格都被合并了,包括我不想合并的單元格,這時候就要指定合并的列了

3. 動態合并相同數據單元格(指定列)

只需要加個if判斷即可指定要合并哪些列

// 這里只放了部分代碼,除了加了個if,其他代碼和上面的一樣 getSpanArr() { for (let i = 0; i < this.tableData.length; i++) {let row = i;// let col = i % this.colCount;if (row === 0) { // i 表示行 j表示列 for (let j = 0; j < this.colFields.length; j++) { this.spanArr[i * this.colFields.length + j] = { rowspan: 1, colspan: 1, }; }} else { for (let j = 0; j < this.colFields.length; j++) { // 當前和上一次的一樣 // 合并所有列的相同數據單元格 if ( this.colFields[j] == 'School' || this.colFields[j] == 'Grade' || this.colFields[j] == 'Class' ) { // 指定合并哪些列 if (this.tableData[row][this.colFields[j]] ===this.tableData[row - 1][this.colFields[j]] ) {let beforeItem = this.spanArr[(row - 1) * this.colFields.length + j];this.spanArr[row * this.colFields.length + j] = { rowspan: 1 + beforeItem.rowspan, colspan: 1,};beforeItem.rowspan = 0;beforeItem.colspan = 0; } else {// rowspan 和 colspan 都為1表格此單元格不合并this.spanArr[row * this.colFields.length + j] = { rowspan: 1, colspan: 1,}; } } }} }

效果:這樣就只合并了我們指定的那幾列了

4. 動態合并相同數據單元格(指定列+合并條件)

有時候我們會遇到不想合并的單元格,比如下面這種情況:

按常理來說,不同小學的數據應該是不做合并才對,正確是這種:

這時候就需要加上一些自定義的合并條件了:

getSpanArr() { for (let i = 0; i < this.tableData.length; i++) {let row = i;// let col = i % this.colCount;if (row === 0) { // i 表示行 j表示列 for (let j = 0; j < this.colFields.length; j++) { this.spanArr[i * this.colFields.length + j] = { rowspan: 1, colspan: 1, }; }} else { for (let j = 0; j < this.colFields.length; j++) { // 當前和上一次的一樣 // 合并所有列的相同數據單元格 if ( this.colFields[j] == 'School' || this.colFields[j] == 'Grade' || this.colFields[j] == 'Class' ) { // 指定合并哪些列 if (this.tableData[row]['School'] !== this.tableData[row - 1]['School'] ) { // 哪些不合并:School不一樣的,不合并this.spanArr[row * this.colFields.length + j] = { rowspan: 1, colspan: 1,}; } else if (this.tableData[row][this.colFields[j]] ===this.tableData[row - 1][this.colFields[j]] ) {let beforeItem = this.spanArr[(row - 1) * this.colFields.length + j];this.spanArr[row * this.colFields.length + j] = { rowspan: 1 + beforeItem.rowspan,// 合并幾列 colspan: 1,// 合并幾行};beforeItem.rowspan = 0;beforeItem.colspan = 0; } else {// rowspan 和 colspan 都為1表格此單元格不合并this.spanArr[row * this.colFields.length + j] = { rowspan: 1, colspan: 1,}; } } }} } // console.log(this.spanArr); },

這時候再看,就是我們想要的效果了

完整代碼

最后附完整代碼:

<template> <div> <el-table :data='tableData' :span-method='objectSpanMethod' border :header-cell-style='{ textAlign: 'center', backgroundColor: '#F5F7FA' }' > <el-table-column prop='School' label='學校' align='center'> </el-table-column> <el-table-column prop='Grade' label='年級' /> <el-table-column prop='Class' label='班級' /> <el-table-column prop='Name' label='姓名' /> <el-table-column prop='Chinese' label='語文' /> <el-table-column prop='Math' label='數學' /> <el-table-column prop='English' label='英語' /> </el-table> </div></template><script>export default { data() { return { // 存放所有的表頭 一定要與tableData一致 colFields: ['School','Grade','Class','Name','Chinese','Math','English', ], spanArr: [], //存儲合并單元格的開始位置 // 表格數據 tableData: [// 一年級{ School: '第一小學', Grade: '1年級', Class: '1班', Name: '張三', Chinese: '90', Math: '100', English: '80',},{ School: '第一小學', Grade: '1年級', Class: '1班', Name: '張偉', Chinese: '90', Math: '99', English: '89',},{ School: '第一小學', Grade: '1年級', Class: '2班', Name: '李四', Chinese: '90', Math: '85', English: '80',},{ School: '第一小學', Grade: '1年級', Class: '3班', Name: '王五', Chinese: '79', Math: '100', English: '80',},// 二年級{ School: '第一小學', Grade: '2年級', Class: '1班', Name: '趙六', Chinese: '95', Math: '100', English: '80',},{ School: '第一小學', Grade: '2年級', Class: '2班', Name: '錢八', Chinese: '98', Math: '85', English: '80',},{ School: '第一小學', Grade: '2年級', Class: '3班', Name: '陳九', Chinese: '79', Math: '100', English: '100',},// 三年級{ School: '第一小學', Grade: '3年級', Class: '1班', Name: '黃十', Chinese: '91', Math: '88', English: '80',},{ School: '第一小學', Grade: '3年級', Class: '2班', Name: '魏一', Chinese: '90', Math: '86', English: '87',},{ School: '第一小學', Grade: '3年級', Class: '3班', Name: '楊二', Chinese: '79', Math: '99', English: '80',},// 第二小學{ School: '第二小學', Grade: '3年級', Class: '3班', Name: '袁零', Chinese: '79', Math: '99', English: '80',}, ], }; }, methods: { /** * 分析每一列,找出相同的 * @param data */ getSpanArr() { for (let i = 0; i < this.tableData.length; i++) {let row = i;// let col = i % this.colCount;if (row === 0) { // i 表示行 j表示列 for (let j = 0; j < this.colFields.length; j++) { this.spanArr[i * this.colFields.length + j] = { rowspan: 1, colspan: 1, }; }} else { for (let j = 0; j < this.colFields.length; j++) { // 當前和上一次的一樣 // 合并所有列的相同數據單元格 if ( this.colFields[j] == 'School' || this.colFields[j] == 'Grade' || this.colFields[j] == 'Class' ) { // 指定合并哪些列 if (this.tableData[row]['School'] !== this.tableData[row - 1]['School'] ) { // 哪些不合并:School不一樣的,不合并this.spanArr[row * this.colFields.length + j] = { rowspan: 1, colspan: 1,}; } else if (this.tableData[row][this.colFields[j]] ===this.tableData[row - 1][this.colFields[j]] ) {let beforeItem = this.spanArr[(row - 1) * this.colFields.length + j];this.spanArr[row * this.colFields.length + j] = { rowspan: 1 + beforeItem.rowspan,// 合并幾列 colspan: 1,// 合并幾行};beforeItem.rowspan = 0;beforeItem.colspan = 0; } else {// rowspan 和 colspan 都為1表格此單元格不合并this.spanArr[row * this.colFields.length + j] = { rowspan: 1, colspan: 1,}; } } }} } // 對數據進行倒序 let stack = []; for (let i = 0; i < this.colFields.length; i++) {for (let j = 0; j < this.tableData.length; j++) { // console.log('i=' + i + ' j=' + j); // i 表示列 j表示行 if (j === 0) { if (this.spanArr[j * this.colFields.length + i].rowspan === 0) { stack.push(this.spanArr[j * this.colFields.length + i]); } } else { if (this.spanArr[j * this.colFields.length + i].rowspan === 0) { stack.push(this.spanArr[j * this.colFields.length + i]); } else { stack.push(this.spanArr[j * this.colFields.length + i]); while (stack.length > 0) {let pop = stack.pop();let len = stack.length;this.spanArr[(j - len) * this.colFields.length + i] = pop; } } }} } // console.log(this.spanArr); }, objectSpanMethod({ row, column, rowIndex, columnIndex }) { // console.log(this.spanArr[rowIndex * this.colFields.length + columnIndex]); return this.spanArr[rowIndex * this.colFields.length + columnIndex]; }, }, mounted() { this.getSpanArr(); },};</script><style lang='scss' scoped></style>

參考:https://blog.csdn.net/u010735120/article/details/122184493

到此這篇關于el-table表格動態合并相同數據單元格(可指定列+自定義合并)的文章就介紹到這了,更多相關el-table 動態合并單元格內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
bbw在线视频| 不卡在线一区| 国产国产精品| 久久国产三级| 免费精品一区| 人人精品人人爱| 久久蜜桃资源一区二区老牛| 久久成人高清| 国产亚洲一卡2卡3卡4卡新区| 99精品99| 精品免费av一区二区三区| 欧美中文一区| 日本午夜精品视频在线观看| 久久国产直播| 九色精品91| 97se亚洲| 美腿丝袜亚洲一区| 精品三级av在线导航| 久久九九99| 日韩亚洲在线| 国产婷婷精品| 欧美久久亚洲| 欧美激情麻豆| 精品福利久久久| 日本少妇一区| 亚洲91精品| 日本欧美一区| 午夜av成人| 国产亚洲在线| 国产精品a级| 悠悠资源网久久精品| 人人爽香蕉精品| 国产高清亚洲| 一本一本久久| 蜜桃久久av一区| 国产亚洲欧美日韩精品一区二区三区 | 黄毛片在线观看| 91久久中文| 丝袜美腿高跟呻吟高潮一区| 欧美激情视频一区二区三区免费 | 99视频在线精品国自产拍免费观看| 一本综合精品| 精品久久一区| 亚洲精品美女91| 国产欧美69| 欧美午夜精彩| 精品一区二区三区的国产在线观看| 欧美黄色精品| 蜜桃91丨九色丨蝌蚪91桃色| 另类中文字幕国产精品| 91久久在线| 色天使综合视频| 欧美aⅴ一区二区三区视频| а√在线中文在线新版| 欧美视频久久| 色婷婷成人网| 国产精品久久| 奇米狠狠一区二区三区| 免费精品视频| 国产一区二区精品久| 青青国产精品| 婷婷久久免费视频| 伊人国产精品| 首页亚洲欧美制服丝腿| 婷婷成人在线| 亚洲精品电影| 亚洲国产专区| jiujiure精品视频播放| 国产农村妇女精品一区二区| 欧美亚洲精品在线| 日韩一区二区三区在线免费观看| 日韩在线观看| 麻豆成全视频免费观看在线看| 久久影院一区二区三区| 国产伦理久久久久久妇女| 秋霞影视一区二区三区| 精品国产黄a∨片高清在线| 久久久久久色| 中文无码日韩欧| 亚洲午夜免费| 欧美久久精品| 蜜臀久久99精品久久久久久9| 免费不卡在线观看| 日韩高清在线不卡| 综合一区av| 欧美亚洲国产日韩| 精品国内亚洲2022精品成人| 中文字幕一区二区精品区| 日韩精品一区二区三区av| 欧美天堂在线| 国产欧美日韩影院| 国产 日韩 欧美 综合 一区| 日韩久久视频| 日本国产亚洲| 国产理论在线| 丝袜美腿成人在线| 中文在线а√天堂| 久久精品福利| 波多野结衣一区| 国产免费播放一区二区| 日本精品另类| 精品欧美一区二区三区在线观看| 男人的天堂亚洲一区| 国产一区二区三区四区五区| 亚洲激情国产| 蜜臀va亚洲va欧美va天堂| 国产福利一区二区三区在线播放| 欧美激情视频一区二区三区在线播放| 好吊视频一区二区三区四区| 7777精品| 98精品视频| 国产亚洲一区| 蜜桃av一区二区| 日韩毛片视频| 国产精品magnet| 天堂av在线一区| 亚洲婷婷在线| 国产精品亚洲综合色区韩国| 丝袜美腿亚洲色图| 久久一区二区三区电影| 青青久久av| 国产一区精品福利| 麻豆视频一区| 亚洲专区视频| 亚洲成人一区| 午夜精品成人av| 日韩精品一卡| 日韩在线综合| 日韩影院二区| 极品av在线| 欧美国产免费| 精品三级久久久| caoporn视频在线| 伊人久久高清| 欧美日韩精品免费观看视欧美高清免费大片 | 欧美在线亚洲| 欧美日韩三区| 黄色成人91| 一区二区三区网站| 亚洲五月婷婷| 乱人伦精品视频在线观看| 午夜在线精品偷拍| 亚洲精品影视| 日韩激情精品| 日韩区一区二| 久久不卡日韩美女| 日本少妇一区二区| 国产极品模特精品一二| 欧美成人a交片免费看| 国产91久久精品一区二区| 欧美.日韩.国产.一区.二区| 免费观看久久久4p| 国产美女撒尿一区二区| 免费成人在线影院| 国产欧美一区| 蜜桃精品在线| 国产调教精品| 成人免费网站www网站高清| 尤物网精品视频| 免费国产自线拍一欧美视频| 美国三级日本三级久久99 | 91tv亚洲精品香蕉国产一区| 国产综合亚洲精品一区二| 欧美亚洲三级| 日韩国产欧美一区二区| 视频一区二区不卡| 国产一区二区三区探花| 久久亚洲电影| 国产亚洲高清在线观看| av亚洲免费| 精品一区视频| 中文字幕日本一区二区| 国产欧美日韩视频在线| 国产视频亚洲| 精品亚洲美女网站| 国产精品久久国产愉拍| 日韩精品一二三四| 伊人精品一区| 97精品在线| 亚洲人亚洲人色久| 日韩午夜黄色| 999久久久国产精品| 国产h片在线观看| 国产美女亚洲精品7777| 日本va欧美va精品发布| 亚洲一区二区免费在线观看| 日韩精品一区二区三区免费观看| 欧美国产极品| 久久精品福利| 国产aⅴ精品一区二区四区| 亚洲天堂av影院| 欧美羞羞视频| 日韩精品三区四区| 免费不卡在线视频| 日韩一区二区三区四区五区| 国产色综合网| 久久久久久久久丰满| 99成人在线视频| 国内亚洲精品| 欧美综合国产|