17

我在使用 DataTables 时遇到问题。当我为最后一列添加 colspan 时,数据表插件不会应用于表。如果我删除最后一个的 colspan 并将其放在任何其他列中,它就可以工作。

例如 -

<table width="100%" border="0" cellspacing="0" cellpadding="0" id="stu_data_table">
   <thead>
      <tr>    
        <th>&nbsp;</th>
        <th colspan="2">&nbsp;</th>
        <th colspan="2">&nbsp;</th>
      </tr>
   </thead>
   <tbody>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
   </tbody>
</table>

$('#stu_data_table').dataTable({
});

有什么解决办法吗?

4

5 回答 5

8

您可以将隐藏列添加到 tr 的末尾,而不是使用复杂的标题示例,这在我看来很老套,但更简单、更短:

<thead>
  <tr>    
    <th>&nbsp;</th> <!-- column 1 -->
    <th colspan="2">&nbsp;</th> <!-- column 2&3 -->
    <th colspan="2">&nbsp;</th> <!-- column 4&5 -->

    <!-- hidden column 6 for proper DataTable applying -->
    <th style="display: none"></th> 
  </tr>
</thead>

<tbody>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>

    <!-- hidden column 6 for proper DataTable applying -->
    <td style="display: none"></td>
  </tr>
</tbody>
于 2019-08-21T13:08:30.023 回答
7

DataTables 不支持您正在使用的 colspans。请改用他们复杂的标题示例。

使用表格显示数据时,您通常希望以组的形式显示列信息。DataTables 完全支持标题中的 colspan 和 rowspans,将所需的排序侦听器分配给适合该列的 TH 元素。每列必须有一个 TH 单元格(并且只有一个),这是唯一的,以便添加侦听器。下面显示的示例将核心浏览器信息分组在一起。

<thead>
    <tr>
        <th rowspan="2">Rendering engine</th>
        <th rowspan="2">Browser</th>
        <th colspan="3">Details</th>
    </tr>
    <tr>
        <th>Platform(s)</th>
        <th>Engine version</th>
        <th>CSS grade</th>
    </tr>
</thead>

你的等价物看起来像这样:

<thead>
  <tr>    
    <th rowspan="2">&nbsp;</th> <!-- column 1 -->

    <th colspan="2">&nbsp;</th> <!-- column 2&3 -->
    <th colspan="2">&nbsp;</th> <!-- column 4&5 -->
  </tr>
 <tr>
    <th>&nbsp;</th> <!-- column 2 -->
    <th>&nbsp;</th> <!-- column 3 -->

    <th>&nbsp;</th> <!-- column 4 -->
    <th>&nbsp;</th> <!-- column 5 -->
 </tr>
</thead>
于 2013-10-17T12:52:50.237 回答
4

dataTable 不支持 colspan 或 rowspan。

如果您使用 colspan,dataTable 将无法理解列数/计算,在这种情况下返回 undefined 并引发错误。

所以我们需要做的是告诉dataTable,万一它没有得到预期的结果,应该是什么替代方案。

为此,我们将使用:defaultContent 属性,当然还有指定目标/受影响的列。

例如:在一个有 3 个td的表上,如果我们使用td colspan="2",我们将不得不为另外 2 个设置默认值(因为一个已经存在 - 它是第一个)。

代码:

"aoColumnDefs": [{
  "aTargets": [2,3],
  "defaultContent": "",
}]
于 2015-02-27T16:30:48.980 回答
4

另一种方法是使用Child rows. 这最终将在父级下方添加一行,如下图所示

在此处输入图像描述

代码

var table =jQuery('#bwki_sites_display').DataTable( {
    'pageLength': 10,
    'lengthMenu': [ 10, 20, 50, 100, 200 ],
    'order': [[ 0, 'desc' ]],

    }
);
table.rows().every( function () {
    var row = table.row( $(this));
    html = '<i class="fa fa-plus"></i>Colspan will come here';              
    row.child(html).show();
    $(this).addClass('shown');                                              
});
于 2016-01-21T10:10:15.483 回答
1

我知道这是一个老话题,但我有同样的问题。<th colspan="2">正在工作,但奇怪的是,只有在最后一列中使用时才有效。

所以

这是行不通的

<tr>    
    <th>&nbsp;</th> <!-- column 1 -->
    <th>&nbsp;</th> <!-- column 2 -->
    <th colspan="2">&nbsp;</th> <!-- column 3&4 -->
</tr>

但这是有效的。

<tr>    
    <th>&nbsp;</th> <!-- column 1 -->
    <th colspan="2">&nbsp;</th> <!-- column 2&3 -->
    <th>&nbsp;</th> <!-- column 4 -->
</tr>

于 2020-12-11T15:35:04.327 回答