禁用 jQuery DataTables 中特定列的排序

IT技术 javascript jquery sorting datatables
2021-03-11 13:47:22

我正在使用 jQuery DataTables 插件对表字段进行排序。我的问题是:如何禁用特定列的排序?我已尝试使用以下代码,但没有奏效:

"aoColumns": [
  { "bSearchable": false },
  null
]   

我还尝试了以下代码:

"aoColumnDefs": [
  {
    "bSearchable": false,
    "aTargets": [ 1 ]
  }
]

但这仍然没有产生预期的结果。

6个回答

这就是你要找的:

$('#example').dataTable( {
      "aoColumnDefs": [
          { 'bSortable': false, 'aTargets': [ 1 ] }
       ]
});
这对我有用。如果你想对第一列进行排序,'aTargets': [ -1 ],第二个 'aTargets': [ 1 ],第三个 'aTargets': [ 2 ] 等等。
2021-04-23 13:47:22
-1是从表末尾开始计数的索引。-1是表格的最后一列)
2021-04-27 13:47:22
从 DataTables 1.10.5 开始,现在可以使用 HTML5 data-* 属性定义初始化选项。参见stackoverflow.com/a/32281113/1430996
2021-04-27 13:47:22
@Lasang -你真正的意思[-1],那么[1][2]等?这是什么-1意思?列的索引不是从1dataTables开始的吗?
2021-04-29 13:47:22
你可以简单地做 'aTargets': [ 1, 2 ]
2021-05-07 13:47:22

从 DataTables 1.10.5 开始,现在可以使用 HTML5 data-* 属性定义初始化选项。

-来自DataTables 示例 - HTML5 数据 -* 属性 - 表格选项

因此,您可以data-orderable="false"th不想排序的列使用例如,下表中的第二列“头像”将不可排序:

<table id="example" class="display" width="100%" data-page-length="25">
    <thead>
        <tr>
            <th>Name</th>
            <th data-orderable="false">Avatar</th>
            <th>Start date</th>
            <th>Salary</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Tiger Nixon</td>
            <td><img src="https://www.gravatar.com/avatar/8edcff60cdcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/04/25</td>
            <td>$320,800</td>
        </tr>
        <tr>
            <td>Garrett Winters</td>
            <td><img src="https://www.gravatar.com/avatar/98fe9834dcca2ad650758fa524d4990?s=64&amp;d=identicon&amp;r=PG" alt="" style="width: 64px; height: 64px; visibility: visible;"></td>
            <td>2011/07/25</td>
            <td>$170,750</td>
        </tr>
        ...[ETC]...
    </tbody>
</table>

请参阅https://jsfiddle.net/jhfrench/6yxvxt7L/ 上的工作示例

这会禁用排序功能,但我发现(在 1.10.12 中)在初始化 DataTable 时该列仍然默认排序,这会使用升序排序字形对列进行样式设置。如果你不想这样,你可以初始化数据表而不用像这样排序: $('#example').DataTable({ 'order': [] });
2021-05-07 13:47:22
IMO,这是这里最好的答案,最简单,最优雅的方法
2021-05-11 13:47:22
@BrianMerrell Wellllllll...看看那个!jsfiddle.net/ja0ty8xr 您应该为该行为打开一个 GitHub 问题。:)
2021-05-18 13:47:22

要禁用第一列排序,请尝试在数据表 jquery 中使用以下代码。null 表示此处启用排序。

$('#example').dataTable( {
  "aoColumns": [
  { "bSortable": false },
  null,
  null,
  null
  ]
} );

禁用对 jQuery 数据表中的列进行排序

@Paulraj 链接已损坏,您介意更改吗?
2021-04-28 13:47:22
从 DataTables 1.10.5 开始,现在可以使用 HTML5 data-* 属性定义初始化选项。参见stackoverflow.com/a/32281113/1430996
2021-05-12 13:47:22

使用 Datatables 1.9.4 我已经使用以下代码禁用了第一列的排序:

/* Table initialisation */
$(document).ready(function() {
    $('#rules').dataTable({
        "sDom" : "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        "sPaginationType" : "bootstrap",
        "oLanguage" : {
            "sLengthMenu" : "_MENU_ records per page"
        },
        // Disable sorting on the first column
        "aoColumnDefs" : [ {
            'bSortable' : false,
            'aTargets' : [ 0 ]
        } ]
    });
});

编辑:

您甚至可以通过no-sort在您的<th>,

并使用此初始化代码:

// Disable sorting on the no-sort class
"aoColumnDefs" : [ {
    "bSortable" : false,
    "aTargets" : [ "no-sort" ]
} ]

编辑 2

在此示例中,我将 Datables 与 Bootstrap 结合使用,遵循旧博文。现在有一个链接,其中包含有关使用 bootstrap数据表进行样式设置的更新材料

谢谢.. 当我们应用排序时丢失 css 怎么办
2021-04-24 13:47:22
@larrylampco 我已经用更新的链接更新了帖子。
2021-04-29 13:47:22
从 DataTables 1.10.5 开始,现在可以使用 HTML5 data-* 属性定义初始化选项。参见 stackoverflow.com/a/32281113/1430996
2021-05-17 13:47:22

我使用的只是在 thead td 中添加一个自定义属性,并通过自动检查该 attr 值来控制排序。

所以 HTML 代码将是

<table class="datatables" cellspacing="0px" >

    <thead>
        <tr>
            <td data-bSortable="true">Requirements</td>
            <td>Test Cases</td>
            <td data-bSortable="true">Automated</td>
            <td>Created On</td>
            <td>Automated Status</td>
            <td>Tags</td>
            <td>Action</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>

用于初始化数据表的 JavaScript 将是(它将动态地从表本身获取排序信息;)

$('.datatables').each(function(){
    var bFilter = true;
    if($(this).hasClass('nofilter')){
        bFilter = false;
    }
    var columnSort = new Array; 
    $(this).find('thead tr td').each(function(){
        if($(this).attr('data-bSortable') == 'true') {
            columnSort.push({ "bSortable": true });
        } else {
            columnSort.push({ "bSortable": false });
        }
    });
    $(this).dataTable({
        "sPaginationType": "full_numbers",
        "bFilter": bFilter,
        "fnDrawCallback": function( oSettings ) {
        },
        "aoColumns": columnSort
    });
});
您应该使用data-bSortable而不是bSortable. bSortable不是有效的 HTML 属性。
2021-05-02 13:47:22
从 DataTables 1.10.5 开始,现在可以使用 HTML5 data-* 属性定义初始化选项。参见 stackoverflow.com/a/32281113/1430996
2021-05-17 13:47:22