1

我正在使用 jquery 数据表,我需要通过首先显示复选框来按包含复选框的第一列对数据进行排序

oTable =  $('#userTable', context).dataTable(
{
    "sAjaxSource":'/ajax/getdata/',
    "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) 
    {
        oSettings.jqXHR = $.ajax( 
        {
            "dataType": 'json',
            "type": "POST",
            "url": sSource,
            "data": params,
            "success" :  function(data)
            {
                fnCallback(data);
                fnSortBySelected();
            } 
        });
    }
});

var fnSortBySelected = function()
{
    var oSettings = oTable.fnSettings();
    var i = 0; 

    $('td:first-child input[type=checkbox]',oTable).sort(function(a, b)
    {
        if(a.checked) 
            oTable.fnUpdate( oSettings.aoData[i]._aData, i, 0);
        else 
            oTable.fnUpdate( oSettings.aoData[i+1]._aData, i, 0);
        i++;       
    });
}

感谢您的时间,这是我到目前为止所尝试的:

 oTable =  $('#userTable', context).dataTable({
"sAjaxSource":'/ajax/getdata/',
"fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
oSettings.jqXHR = $.ajax( {
           "dataType": 'json',
           "type": "POST",
           "url": sSource,
           "data": params,
           "success" :  function(data){
               fnCallback(data);
               fnSortBySelected();
           } 
        } );
}

 });

var fnSortBySelected = function()
{
    var oSettings = oTable.fnSettings();
    var i = 0; 

    $('td:first-child input[type=checkbox]',oTable).sort(function(a, b){
        if(a.checked) 
             oTable.fnUpdate( oSettings.aoData[i]._aData, i, 0);
        else 
             oTable.fnUpdate( oSettings.aoData[i+1]._aData, i, 0);
         i++;       
    } );


}
4

3 回答 3

2

我通过在每个选定的复选框上创建一个隐藏列(第一列索引 0)来使用士力架的答案,我将相应的隐藏列设置为“选定”,然后我对该隐藏列和名字列上的表进行排序

隐藏第一列使用

oTable.fnSetColumnVis( 0, false );

对于每个单击的复选框,请执行此操作

$('input[tyope=checkbox]',oTable).each(function(){
  var aPos = oTable.fnGetPosition($(this).parents('tr:first').get(0));
  oTable.fnUpdate( 'selected',aPos, 0 );
  $(this).attr('checked', true);  
});

然后打电话

oTable.fnSort( [ [0,'desc'],[2,'asc']] );

谢谢你们的帮助

于 2012-10-02T19:06:29.280 回答
1

只需为您的列添加正确的 aoColumnDefs:

oTable =  $('#userTable', context).dataTable(
{
    "aoColumnDefs": [
        { "sSortDataType": "dom-checkbox", "aTargets": [ 0 ] }
    ],
    .....

请参阅数据表列

于 2013-02-14T11:51:08.600 回答
0

也许你可以试试这个:

$(document).ready(function() {
  var oTable = $('#example').dataTable();

  // Sort immediately with columns 0 and 1
  oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
} );
于 2012-10-01T16:59:57.733 回答