jQuery实现table单元格行合并

目标:
从这样一张表中,合并相同元素为一列
jQuery实现table单元格行合并_第1张图片

最终期待效果为:
jQuery实现table单元格行合并_第2张图片

可以看到同一列中相同的元素被合并,这是怎么做到的呢,第一个想法是从每列的第一行数据开始遍历该列,当发现后一行数据跟前一行数据相同时删除该行同时给前一行的rowspan+1,但实际效果问题百出,为什么呢,是这样的,虽然后一行与前一行合并了,但是被合并行依然只占据它原本的位置,而被他合并的单元格的位置,则由各自同行的其他单元格取代它的位置,于是补救方案为不是删除数据相同的列,只是将其隐藏,最终代码为:


<html>
    <head>
        <meta charset="utf-8">
        <title>行合并title>

        <style type="text/css">
            table
              {
              border-collapse:collapse;

              }

            table, td, th
              {
              border:1px solid black;
              text-align:center;
              }

             input{
                border:0;
             }
        style>

        <script type="text/javascript">
            function merge(tableId,col){
                var tr = document.getElementById(tableId);
                for(var i=1; i//表示数据内容的第二行
                    if(tr.rows[i].cells[col].innerHTML == tr.rows[i - 1].cells[col].innerHTML){//col代表列
                        t = i-1;
                        while(tr.rows[i].cells[col].innerHTML == tr.rows[t].cells[col].innerHTML){
                            tr.rows[i].cells[col].style.display="none";
                            if(tr.rows[t].cells[col].rowSpan <= (i-t)){  
                                tr.rows[t].cells[col].rowSpan +=1;      //设置前一行的rowspan+1
                            }
                            i++;
                        }
                    }               
                }
            }



        script>

    head>

    <body>
        <form>
            <table id="table1">
                <thead>
                    <tr >
                        <td rowspan=2 id="listId">number 1td>
                        <td rowspan=2>number 2 td>
                        <td rowspan=2>number 3td>
                        <td colspan=3>number 4td>
                        <td rowspan=2>number 5td>
                        <td colspan=2>number 6td>
                        <td rowspan=2>number 7td>                 
                    tr>

                    <tr>
                        <td>list 1td>
                        <td>list 2td>
                        <td>list 3td>
                        <td>list 4td>
                        <td>list 5td>                 
                    tr>

                thead>

                <tbody>
                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>

                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>
                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>

                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>
                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>

                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 2"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>
                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>

                    <tr>
                        <td><input type="text" value="12"/>td>
                        <td><input type="text" value="item 1"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>
                        <td><input type="text"/>td>                       
                    tr>

                <tbody>

            table>


            <input   type="button"     value="merge 1" onclick="merge('table1','0')"/>
            <input   type="button"      value="merge 2" onclick="merge('table1','1')"/>

        form>
    body>
html>

你可能感兴趣的:(前端)