JQuery Table 合并单元格-解决Bug版本

网络中提供的方法是:

<script type="text/javascript">
        function _w_table_rowspan(_w_table_id, _w_table_colnum) {
            _w_table_firsttd = "";
            _w_table_currenttd = "";
            _w_table_SpanNum = 0;
            _w_table_Obj = $(_w_table_id + " tr td:nth-child(" + _w_table_colnum + ")");
            _w_table_Obj.each(function (i) {
                if (i == 0) {
                    _w_table_firsttd = $(this);
                    _w_table_SpanNum = 1;
                } else {
                    _w_table_currenttd = $(this);
                    if (_w_table_firsttd.text() == _w_table_currenttd.text()) {
                        _w_table_SpanNum++;
                        _w_table_currenttd.hide(); //remove();
                        _w_table_firsttd.attr("rowSpan", _w_table_SpanNum);
                    } else {
                        _w_table_firsttd = $(this);
                        _w_table_SpanNum = 1;
                    }
                }
            });
        }
        $(document).ready(function () {
            _w_table_rowspan("#HZ", 1);
            _w_table_rowspan("#HZ", 2);
            _w_table_rowspan("#HZ", 3);
        });
    </script>

但这个方式存在一个bug,纯单元格的合并,不管是不是一组的,例如下面的表格,合并出来就有问题:

1 A E    
1 A E    
1 A E    
2 B E    
2 B E    
2 B E    
3 B E    
3 C E    

如果用上面的代码合并就变成这个样子了:

1 A E    
   
   
2 B    
   
   
3    
C    

我们希望是:

1 A E    
B    
   
2 B E    
   
   
3 B E    
C    

所以只需要做少许变更便可达到目的,在合并的时候判断上下单元格值得时候携带左边的单元格一起判断:

修改后的代码如下:

function _w_table_rowspan(_w_table_id, _w_table_colnum) {
    _w_table_firsttd = "";
    _w_table_currenttd = "";
    _w_table_SpanNum = 0;
    _w_table_Obj = $(_w_table_id + " tr td:nth-child(" + _w_table_colnum + ")");
    _w_table_PreObj = $(_w_table_id + " tr td:nth-child(" + (_w_table_colnum == 1 ? 1 : _w_table_colnum - 1) + ")");
    _w_table_Prefirsttd = "";
    _w_table_Obj.each(function (i) {
        if (i == 0) {
            _w_table_firsttd = $(this);
            _w_table_Prefirsttd = $(_w_table_PreObj[0]);
            _w_table_SpanNum = 1;
        } else {
            _w_table_currenttd = $(this);
            if (_w_table_Prefirsttd.text() + "-" + _w_table_firsttd.text() == $(_w_table_PreObj[i]).text() + "-" + _w_table_currenttd.text()) {
                if ($(_w_table_PreObj[i]).text() + "-" + _w_table_currenttd.text() != "-") {
                    _w_table_SpanNum++;
                    _w_table_currenttd.hide(); //remove();
                    _w_table_firsttd.attr("rowSpan", _w_table_SpanNum);
                }
            } else {
                _w_table_firsttd = $(this);
                _w_table_Prefirsttd = $(_w_table_PreObj[i]);
                _w_table_SpanNum = 1;
            }
        }
    });
}
原文地址:https://www.cnblogs.com/qidian10/p/3393605.html