禁用jQuery DataTables中特定列的排序


156

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

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

我也尝试了以下代码:

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

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


1
我已经编辑了答案,并提供了一个选项,您可以在其中设置TH定义中的禁用列。
Paulo Fidalgo 2013年

使用CSS禁用按钮。查看此页面。 datatables.net/forums/discussion/21164/…–
尤金·约瑟夫

Answers:


176

这是您要寻找的:

$('#example').dataTable( {
      "aoColumnDefs": [
          { 'bSortable': false, 'aTargets': [ 1 ] }
       ]
});

3
这对我有用。如果要对第一列进行排序,则为“ aTargets”:[-1],对于第二个“ aTargets”:[1],对于第三个“ aTargets”:[2],依此类推。
Lasang

5
您可以简单地执行'aTargets':[1,2]
Adrien Be

2
@Lasang -你真正的意思[-1],那么[1][2]等?什么-1意思 列的索引不是从1dataTables 开始的吗?
Dan Nissenbaum 2014年

1
-1是从表末开始计数的索引。(-1是表格的最后一列)
Ramy Nasr 2014年

1
从DataTables 1.10.5开始,现在可以使用HTML5 data- *属性定义初始化选项。参见stackoverflow.com/a/32281113/1430996
Jeromy French

87

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

-from DataTables示例 -HTML5 data- *属性-表选项

因此,您可以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/上的工作示例


9
IMO,这是最好的答案,最简单,最优雅的方法
Hamman Samuel

2
这禁用了排序功能,但我发现(在1.10.12中)在初始化DataTable时默认情况下仍对列进行排序,这会使用升序的排序字形来设置列的样式。如果您不希望这样做,则可以在不进行排序的情况下初始化数据表:$('#example')。DataTable({'order':[]});
布莱恩·梅雷尔

@BrianMerrell Wellllllll ...看看!jsfiddle.net/ja0ty8xr 您应该针对该行为打开GitHub问题。:)
Jeromy French


60

使用数据表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设置Datatable样式的更新资料。


@larrylampco我已经用更新的链接更新了帖子。
Paulo Fidalgo 2014年

谢谢..当我们应用排序时,丢失CSS怎么

1
从DataTables 1.10.5开始,现在可以使用HTML5 data- *属性定义初始化选项。参见stackoverflow.com/a/32281113/1430996
法国耶罗米(Jeromy French)

27

我所使用的只是在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将是(它将动态地从表iteself获取排序信息;)

$('.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
    });
});

3
您应该使用data-bSortable而不是bSortablebSortable不是有效的HTML属性。
James Donnelly 2013年

从DataTables 1.10.5开始,现在可以使用HTML5 data- *属性定义初始化选项。参见stackoverflow.com/a/32281113/1430996
法国耶罗米(Jeromy French)

15

columnDefs现在接受课程。我想说这是首选方法,如果您想指定要在标记中禁用的列:

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th class="datatable-nosort">Actions</th>
        </tr>
    </thead>
    ...
</table>

然后,在您的JS中:

$("table").DataTable({
    columnDefs: [{
        targets: "datatable-nosort",
        orderable: false
    }]
});

10

这是您可以用来禁用要禁用的某些列的方法:

 $('#tableId').dataTable({           
            "columns": [
                { "data": "id"},
                { "data": "sampleSortableColumn" },
                { "data": "otherSortableColumn" },
                { "data": "unsortableColumn", "orderable": false}
           ]
});

因此,您要做的就是将“ orderable”:false添加到您不想进行排序的列中。


6
$("#example").dataTable(
  {
    "aoColumnDefs": [{
      "bSortable": false, 
      "aTargets": [0, 1, 2, 3, 4, 5]
    }]
  }
);

Bhavesh的答案很聪明,但是太过分了。要禁用排序,只需使用abhinav的答案即可。禁用第一列排序,在aoColumnDefs选项中添加列目标:"bSortable": false, "aTargets": [0]
Matthew

5

对于单列排序禁用,请尝试以下示例:

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0 ] }
           ]
        });
    });                                         
</script>

对于“多列”,请尝试以下示例:您只需添加列号。默认情况下,它从0开始

<script type="text/javascript">                         
    $(document).ready(function() 
    {
        $("#example").dataTable({
           "aoColumnDefs": [
              { 'bSortable': false, 'aTargets': [ 0,1,2,4,5,6] }
           ]
        });
    });                                         
</script>  

仅在这里Column 3有效


5

1.10.5开始,只需包含

“可订购:假”

在columnDefs中,并使用

'目标:[0,1]'

表应该像:

var table = $('#data-tables').DataTable({
    columnDefs: [{
        targets: [0],
        orderable: false
    }]
});

5

如果将FIRST column orderable属性设置为false,则还必须设置默认order列,否则它将不起作用,因为第一列是默认的排序列。下面的示例禁用对第一列的排序,但将第二列设置为默认顺序列(请记住dataTables的索引基于零)。

$('#example').dataTable( {
  "order": [[1, 'asc']],
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

这是截至2020
Brian


3

更新Bhavish的答案(我认为这是针对较旧版本的DataTables的,对我不起作用)。我认为他们更改了属性名称。试试这个:

<thead>
    <tr>
        <td data-sortable="false">Requirements</td>
        <td data-sortable="false">Automated</td>
        <td>Created On</td>
    </tr>
</thead>
<tbody>
    <tr>
        <td>

这似乎是一种不错的方法……如果可行,但对我而言不行。有文件记录吗?
AllInOne

1
@AllInOne:是的,有关data-orderable...请参见stackoverflow.com/a/32281113/1430996data-sortable也可以,但是我找不到记录在哪里。
Jeromy French

更好的解决方案
华盛顿·莫赖斯

2

使用类:

<table  class="table table-datatable table-bordered" id="tableID">
    <thead>
        <tr>
            <th class="nosort"><input type="checkbox" id="checkAllreInvitation" /></th>
            <th class="sort-alpha">Employee name</th>
            <th class="sort-alpha">Send Date</th>
            <th class="sort-alpha">Sender</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="userUid[]" value="{user.uid}" id="checkAllreInvitation" class="checkItemre validate[required]" /></td>
            <td>Alexander Schwartz</td>
            <td>27.12.2015</td>
            <td>dummy@email.com</td>
        </tr>
    </tbody>
</table>
<script type="text/javascript">
    $(document).ready(function() {
        $('#tableID').DataTable({
            'iDisplayLength':100,
            "aaSorting": [[ 0, "asc" ]],
            'aoColumnDefs': [{
                'bSortable': false,
                'aTargets': ['nosort']
            }]
        });
    });
</script>

现在,您可以将“ nosort”类分配给<TH>



1

如果您已经必须隐藏某些列,例如“我隐藏姓氏”列。我只需要连接fname,lname,所以我进行了查询,但从前端隐藏了该列。在这种情况下,禁用排序的修改如下:

    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ 3 ] },
        {
            "targets": [ 4 ],
            "visible": false,
            "searchable": true
        }
    ],

请注意,我在这里具有隐藏功能

    "columnDefs": [
            {
                "targets": [ 4 ],
                "visible": false,
                "searchable": true
            }
        ],

然后我将其合并为 "aoColumnDefs"


1
  1. 使用以下代码禁用第一列的排序:

    $('#example').dataTable( {
      "columnDefs": [
        { "orderable": false, "targets": 0 }
      ]
    } );
  2. 要禁用默认排序,您还可以使用:

    $('#example').dataTable( {
         "ordering": false, 
    } );

1

您可以在列上使用.notsortable()方法进行定向

 vm.dtOpt_product = DTOptionsBuilder.newOptions()
                .withOption('responsive', true)
        vm.dtOpt_product.withPaginationType('full_numbers');
        vm.dtOpt_product.withColumnFilter({
            aoColumns: [{
                    type: 'null'
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'text',
                    bRegex: true,
                    bSmart: true
                }, {
                    type: 'select',
                    bRegex: false,
                    bSmart: true,
                    values: vm.dtProductTypes
                }]

        });

        vm.dtColDefs_product = [
            DTColumnDefBuilder.newColumnDef(0), DTColumnDefBuilder.newColumnDef(1),
            DTColumnDefBuilder.newColumnDef(2), DTColumnDefBuilder.newColumnDef(3).withClass('none'),
            DTColumnDefBuilder.newColumnDef(4), DTColumnDefBuilder.newColumnDef(5).notSortable()
        ];

1

有两种方法,一种是在定义表标题时在html中定义的

<thead>
  <th data-orderable="false"></th>
</thead>

另一种方法是使用javascript,例如,您拥有表格

<table id="datatables">
    <thead>
        <tr>
            <th class="testid input">test id</th>
            <th class="testname input">test name</th>
    </thead>
</table>

然后,

$(document).ready(function() {
    $('#datatables').DataTable( {
        "columnDefs": [ {
            "targets": [ 0], // 0 indicates the first column you define in <thead>
            "searchable": false
        }
        , {
            // you can also use name to get the target column
            "targets": 'testid', // name is the class you define in <th>
            "searchable": false
        }
        ]
    }
    );
}
);

0

您还可以像这样使用负索引:

$('.datatable').dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "aoColumnDefs": [
        { 'bSortable': false, 'aTargets': [ -1 ] }
    ]
});

0

该代码将如下所示:

$(".data-cash").each(function (index) {
  $(this).dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
    "sPaginationType": "bootstrap",
    "oLanguage": {
      "sLengthMenu": "_MENU_ records per page",
      "oPaginate": {
        "sPrevious": "Prev",
        "sNext": "Next"
      }
    },
    "bSort": false,
    "aaSorting": []
  });
});

0

这是答案!

targets 是列号,从0开始

$('#example').dataTable( {
  "columnDefs": [
    { "orderable": false, "targets": 0 }
  ]
} );

-2

在表中设置类“ no-sort”,然后添加css .no-sort {指针事件:none!important; 光标:默认!重要;背景图片:无!重要;}这样,它将隐藏向上箭头并消除头部中的事件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.