【问题标题】:jquery plugin Datatable :using rowspan in tbody causes wrongjquery插件Datatable:在tbody中使用rowspan会导致错误
【发布时间】:2011-08-07 07:51:16
【问题描述】:

我正在使用一个名为DataTablesjQuery插件:

http://www.datatables.net/

插件不支持 tbody 中的行跨度

<tr class="colorrow">   
    <td id="greater" rowspan="3">TMMS</td> 
    <td>Case Volume</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>1</td> 
    <td>1</td>
</tr>

还有其他解决办法吗?

【问题讨论】:

    标签: jquery datatables html-table


    【解决方案1】:

    试试这个。只需应用 css "display:none;"您要应用行跨度的位置。

    <table id="example">
    <tr class="colorrow">   
        <td id="greater" rowspan="3">TMMS</td> 
        <td>Case Volume</td> 
        <td>0</td> 
        <td>0</td> 
        <td>0</td> 
        <td>1</td> 
        <td>1</td>
    </tr>
    <tr class="colorrow">   
        <td style="display: none;">TMMS</td> 
        <td>Case Volume</td> 
        <td>0</td> 
        <td>0</td> 
        <td>0</td> 
        <td>1</td> 
        <td>1</td>
    </tr>
    <tr class="colorrow">   
        <td style="display: none;">TMMS</td> 
        <td>Case Volume</td> 
        <td>0</td> 
        <td>0</td> 
        <td>0</td> 
        <td>1</td> 
        <td>1</td>
    </tr>
    </table>
    

    为数据表放置相同的脚本。

    <script type="text/javascript">
          $(document).ready(function() {
                $('#example').DataTable();
          });
    </script>
    

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      datatables.net 网站上的 fnFakeRowspan 函数对我来说效果不佳。相反,我写了一个新版本:

      https://gist.github.com/4155754

      要使用它,请将 data-rowspan="XXX" 和 data-hide="true" 属性添加到您的单元格中,如下所示:

      <table id="table">
        <tr>
          <td data-rowspan="2">-</td>
        </tr>
        <tr>
          <td data-hide="true">-</td>
        </tr>
      </table>
      

      理想情况下,此脚本会自动计算要隐藏的单元格,但我已经有了该信息,所以没有将其写入此脚本。

      然后照常调用:

      $('#table').dataTable().fnFakeRowspan();
      

      【讨论】:

        【解决方案4】:

        重绘表格后可以隐藏单元格并添加rowspan属性

        在配置中添加参数drawCallback

        "drawCallback": function ( settings ) {
           drawCallback(this.api());                
        }
        

        然后暴露回调函数

        /**
         * drawCallback
         * launch after search
         * 
         * @param {Object} api - dataTable().api()
         * @param {bool} isMobile
         * 
         **/
        function drawCallback(api) {
           var rows = api.rows( {page:'current'} ).nodes(),
               settings = {
                    "COLUMN_THEME" : 1,
                    "COLUMN_SUBTHEME" : 3
               };
        
                $("#myTable").find('td').show();
                mergeCells(rows, settings.COLUMN_THEME);
                mergeCells(rows, settings.COLUMN_SUBTHEME);
            }
        }
        

        然后是折叠的函数

        /**
         * mergeCells
         * Merges cells with the same wording
         * 
         * @param {Object} api - dataTable().api()
         * @param {Array} rows - array of selected TR element
         * @param {Number} rowIndex - index of column
         * 
         **/
        function mergeCells(rows, rowIndex) {
        
            var last = null,
                currentRow = null,
                k = null,
                gNum = 0,
                refLine = null;
        
            rows.each( function (line, i) {
                currentRow = line.childNodes[rowIndex];
        
                if ( last === currentRow.innerText ) {
                    currentRow.setAttribute('style', 'display: none');
                    ++k;
        
                    return; //leave early
                }
        
                last = currentRow.innerText;
        
                if ( i > 0 ) {
                    rows[refLine].childNodes[rowIndex].rowSpan = ++k;
                    ++gNum;
                }
        
                k = 0; refLine = i;          
            });
        
            // for the last group
            rows[refLine].childNodes[rowIndex].rowSpan = ++k;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-02
          • 1970-01-01
          • 2017-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多