element-ui中el-table的跨行,合并行計算方式

      網友投稿 1971 2025-04-01

      背景

      在最近的一個迭代上,有一個功能點是在表格中做一個合并單元格的效果。大致如下圖

      只有第一列合并行,跨行。合并的規(guī)則是縱向相鄰的連續(xù)N行,如果id一致,則合并。

      看到這個需求一開始我以為很簡單,表格跨行.跨列,不就是設置rowspan 和colspan。于是我就把這個功能點放到最后來實現了。

      等到真正去做的時候,查了一下element的文檔,發(fā)現并沒那么簡單。需要自己動手去寫一個方法設置每個單元格的rowspan和 colspan。 眼看要提測了,想偷懶的想借他山之石。于是在前端群里問了一下,又沒人寫過類似的,解決一下。后來想想真是多此一舉,關鍵時刻一定要相信自己。何況很久沒有遇到有意思的題目了。看起來很有趣。在前端群里得到否定答案的我,決定加班好好研究一下這個合并的規(guī)則。為他人鋪一個康莊大道。

      認真研究

      以下是官方提供的一個在第一列合并行的例子

      objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex % 2 === 0) { return { rowspan: 2, colspan: 1, } } else { return { rowspan: 0, colspan: 0, } } } }

      在el-table標簽上設置 :span-method="objectSpanMethod" 就能實現在第一列的偶數行被合并。這個例子寫的很簡單。沒有摻雜任何業(yè)務邏輯。該方法返回的數據可以是 一個包含rowspan和colspan的對象。 {rowspan: 2, colspan: 1} 表示當前單元格占用二行一列。 {rowspan: 0, colspan: 0} 表示當前單元格缺少,或被合并了。

      row表示當前行。column表示當前列,rowIndex當前行的索引,columnIndex 當前列的索引。

      在日常開發(fā)中,常見的合并行,或合并列的場景是根據后端返回的一個數組,依據其中的某一個屬性來合并行。比如有一個表格,統計每個人車輛的所屬情況。后端是以車輛為粒度返回數據。當一個人有多臺車時,(比如我)就需要將姓名那一列合并行。這樣做后,信息的層次和結構會更加清晰。表現得更加具體,形象。

      思路實現

      根據合并的規(guī)則可以知道,在我的需求中,只需要確定rowspan的值即可。也就是合并多少行,對于被合并的單元格,rowspan和colspan都為零。而合并的單元格,他的colspan為1,因為它不跨列。

      于是拿到表格數據后,對表格數據進行以下處理。假設要合并的字段為runPeriod。相同的runPeriod單元格合并起來。

      addSpanRows(tableData) { let pos = 0 let len = tableData.length for (let i = 0; i < len; i++) { const item = tableData[i] if (i === 0) { item.$rows = 1 pos = 0 } if (i !== 0) { if (item.runPeriod === tableData[i - 1].runPeriod) { item.$rows = 0 tableData[pos].$rows = tableData[pos].$rows + 1 } else { item.$rows = 1 pos = i } } } }

      使用pos記錄出現重復的元素的索引,找到一個重復后就將索引為pos的記錄的 $rows 加1,找不到就將pos設置為當前遍歷的索引

      element-ui中el-table的跨行,合并行計算方式

      spanMethod({row, _, __, columnIndex}) { if (columnIndex === 0) { return { rowspan: row.$rows, colspan: row.$rows ? 1 : 0, } } }

      當時第一列時使用$rows進行合并單元格。

      這樣配置一下即可。

      HTML javaScript

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Access引擎怎么下載(微軟access怎么下載)
      下一篇:excel 換行(excel換行怎么弄)
      相關文章
      亚洲成亚洲乱码一二三四区软件| mm1313亚洲精品无码又大又粗| 亚洲国产精品无码久久青草| 亚洲av午夜电影在线观看| 亚洲另类春色校园小说| 亚洲熟妇无码久久精品| 亚洲熟妇无码久久精品| 亚洲精品美女视频| 久久亚洲精品成人无码网站| 噜噜噜亚洲色成人网站∨| 亚洲精品国产手机| 亚洲毛片免费视频| 亚洲精品国产啊女成拍色拍| 亚洲成人免费网址| 亚洲制服丝袜在线播放| 亚洲an日韩专区在线| 日韩亚洲国产综合高清| 亚洲精品色播一区二区| 鲁死你资源站亚洲av| 亚洲av无码成人精品区在线播放 | 亚洲?V乱码久久精品蜜桃 | 亚洲国产欧洲综合997久久| 亚洲国产AV一区二区三区四区| 亚洲av无码成人影院一区| 亚洲AV蜜桃永久无码精品| 亚洲国产精品毛片av不卡在线| 亚洲精品无码你懂的网站| 国产午夜亚洲不卡| 亚洲av永久无码精品秋霞电影影院| 久久精品国产亚洲AV麻豆王友容| 亚洲av片劲爆在线观看| 亚洲视频在线观看网址| 亚洲剧场午夜在线观看| 亚洲欧美成人一区二区三区| 国产成人亚洲精品91专区高清 | 亚洲大片免费观看| 亚洲一区二区无码偷拍| 豆国产96在线|亚洲| 中文字幕亚洲图片| 亚洲国产精品lv| 亚洲午夜在线一区|