Datatables首先对具有特定类名的行进行排序

Datatables首先对具有特定类名的行进行排序,datatables,Datatables,因此,基本上当单击一行时,我会向父TR添加一个类,然后重新绘制表 $('#datatables').on( 'click', 'tbody tr:not(".group")', function (e) { if($(this).hasClass('transfer')) { $(this).toggleClass('selected'); } table .order( [ 7, 'asc

因此,基本上当单击一行时,我会向父TR添加一个类,然后重新绘制表

$('#datatables').on( 'click', 'tbody tr:not(".group")', function (e) {
        if($(this).hasClass('transfer')) {
            $(this).toggleClass('selected');
        }

        table
                .order( [ 7, 'asc' ] )
                .draw();    
        if($('tr.selected').length > 0) {
            $('#ts_btn').removeClass('hidden'); 
        } else {
            $('#ts_btn').addClass('hidden');    
        }
    } );
但是我如何才能让表将所选行放在顶部呢

我试过这个:

"columnDefs": [
            {
                "targets": [7],
                "visible": false,
                render: function ( data, type, row ) {                  
                  if (type == 'sort') {
                      return $(row).hasClass('selected') ? 1 : 0;
                  }  else {
                      return data;
                  }    
                }  
            }
        ],
但它不起作用


我没有为Datatables使用新行选择的原因是,我使用条形码扫描仪进行读取,并根据选择行的内容进行过滤。(除了单击行)

以下是实现此目的的一种方法:

  • 创建一个隐藏列
  • var columnDefs=[
    //…其他一些专栏。。。
    {
    标题:“选定”,
    可见:假,
    可搜索:false
    }
    ];
    
  • 用零填充它
  • var数据集=[
    [
    //一些数据,,
    0
    ]
    // ...
    ]
    
  • 在该列上启用
  • myTable=$(“#示例”).DataTable({
    订单固定:[
    0,//隐藏列的索引
    “描述”
    ],
    数据:数据集,
    列:columnDefs,
    选择:“多个”
    });
    
  • 在选择事件时,浏览选定行,并将隐藏列的单元格值设置为1
  • myTable.on('select.dt deselect.dt',函数(e,dt,type,index){
    如果(类型=='行'){
    var$rows=myTable.rows(索引);
    变量数据=e.type=='选择'?1:0;
    $rows.every(函数(索引){
    myTable.单元格(索引,6).数据(数据);
    });
    }
    });
    
    工作区:

    我特别需要一种方法,不管用户定义的排序如何,都可以首先保留选定的行,但是您可以根据需要更改选择器和事件处理程序。
    如果您不想添加所有的零,但我找不到一个,那么可能有一种方法可以使它与静态数据一起工作。

    此外,这显然无法在服务器端分页时立即实现。

    以下是实现这一点的一种方法:

  • 创建一个隐藏列
  • var columnDefs=[
    //…其他一些专栏。。。
    {
    标题:“选定”,
    可见:假,
    可搜索:false
    }
    ];
    
  • 用零填充它
  • var数据集=[
    [
    //一些数据,,
    0
    ]
    // ...
    ]
    
  • 在该列上启用
  • myTable=$(“#示例”).DataTable({
    订单固定:[
    0,//隐藏列的索引
    “描述”
    ],
    数据:数据集,
    列:columnDefs,
    选择:“多个”
    });
    
  • 在选择事件时,浏览选定行,并将隐藏列的单元格值设置为1
  • myTable.on('select.dt deselect.dt',函数(e,dt,type,index){
    如果(类型=='行'){
    var$rows=myTable.rows(索引);
    变量数据=e.type=='选择'?1:0;
    $rows.every(函数(索引){
    myTable.单元格(索引,6).数据(数据);
    });
    }
    });
    
    工作区:

    我特别需要一种方法,不管用户定义的排序如何,都可以首先保留选定的行,但是您可以根据需要更改选择器和事件处理程序。
    如果您不想添加所有的零,但我找不到一个,那么可能有一种方法可以使它与静态数据一起工作。
    而且,这显然无法在服务器端分页的情况下立即实现