使用原生table实现相同数据进行合并

在前端开发中,针对具有相同类别的表格数据,可以通过在渲染时为元素添加自定义属性(如zyvalue),然后在JavaScript中检查这些属性来决定是否合并单元格。文章提供了一段Vue.js的示例代码,展示了如何在HTML和JS中操作,通过遍历和比较属性值来实现表格单元格的合并。
摘要由CSDN通过智能技术生成

需求:在开发中经常会遇到表格的使用,遇到相同的类目前端页面需要合并进行显示

思路就是:当拿到数据,去渲染数据的时候可以给元素加上一个自定义的属性,这个属性是通过后端返回来的,后面我们在做处理的时候 就可以去判断这个属性是否相等,相等的话我们就把这两个单元格做合并处理,如:

html代码

 <table id="tableBody" cellspacing="0">
                <tbody>
                    <tr v-for="(item,index) in TableData.list" :key="index">
                        <td :zyvalue=item.hyml>{{item.hymlText}} </td>
                        <td :zyvalue=item.hyml>{{item.hymlTotal}} </td>
                        <td :zyvalue=item.yjzy>{{item.yjzyText}}</td>
                        <td :zyvalue=item.yjzy>{{item.yjzyTotal}}</td>
                        <td :zyvalue=item.ejzy>{{item.ejzyText}}</td>
                        <td :zyvalue=item.ejzy>{{item.ejzyTotal}}</td>
                        <td :zyvalue=item.sjzy>{{item.sjzyText}}</td>
                        <td :zyvalue=item.sjzy>{{item.sjzyTotal}}</td>
                    </tr>
                </tbody>
            </table>

js部分

     // table的id  需要合并的列(从0开始算)
        mergeCell(tableId, cols) {
            let that = this
            var table = document.getElementById(tableId);
            if (table && table.rows) {
                var table_rows = table.rows;
                // 需要合并的列的数组
                cols.forEach((v, k) => {
                    // 循环table每⼀⾏
                    for (let i = 0; i < table_rows.length - 1; i++) {
                        // row
                        let now_row = table_rows[i];
                        let next_row = table_rows[i + 1];
                        // col
                        let now_col = now_row.cells[v];
                        let next_col = next_row.cells[v];
                        if (($(now_col).attr('zyvalue') != "" || $(next_col).attr('zyvalue') != "") && $(now_col).attr('zyvalue') === $(next_col).attr('zyvalue')) {
                            // 标记为需要删除
                            $(next_col).addClass('remove')
                            // 递归判断当前对象是否已经被删除
                            this.setParentSpan(table, i, v)
                        }
                    }
                })
                $(".remove").remove();
            }

        },

        // (递归⽅法,⽤于多⾏统计) pram => table表格当前⾏对应的列
        setParentSpan(table, row, col) {
            var col_item = table.rows[row].cells[col]
            if ($(col_item).hasClass('remove')) {
                this.setParentSpan(table, --row, col)
            } else {
                col_item.rowSpan += 1
            }
        },

数据拿到以后我们再去调用合并表格单元格的方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值