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

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

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

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
            }
        },

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

猜你喜欢

转载自blog.csdn.net/m0_66722601/article/details/129138433