数据表自定义过滤服务器端

Ami*_*Mog 10 datatables django-datatable datatables-1.10

我正在使用datatables(datatables.net)并使用服务器端处理(django).

我有一个单独的文本字段,我在其中使用它来在已经呈现表之后自定义过滤DataTable中的数据.

以下工作正常:

我想自定义过滤列

var table = $('#problem_history').DataTable( {
    "bJQueryUI": true,
    "aaSorting": [[ 1, "desc" ]],
    "aoColumns": [
      // various columns here
    ],
    "processing": true,
    "serverSide": true,
    "ajax": {
      "url": "/getdata",
      "data": {
        "friend_name": 'Robert'
      }
    }  
} );
Run Code Online (Sandbox Code Playgroud)

所以在页面加载(数据表的初始加载)时,它过滤掉'Robert'就好了.但现在我想以编程方式更改数据以过滤"friend_name"=="Sara"

我尝试了以下内容,filteredData具有正确的过滤对象,但表本身不会使用新过滤器重绘.

var filteredData = table.column( 4 ).data().filter(
    function ( value, index ) {
        return value == 'Sara' ? true : false;
    }
);
table.draw();
Run Code Online (Sandbox Code Playgroud)

我也试过这个,但没有运气.

filteredData.draw();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢您的帮助.

Dam*_*jar 8

这是一个非常好的解释如何做到这一点:https: //datatables.net/reference/option/ajax.data

我目前正在使用此代码:

"ajax": {"url":"/someURL/Backend",
        "data": function ( d ) {
                  return $.extend( {}, d, {
                    "parameterName": $('#fieldIDName').val(),
                    "parameterName2": $('#fieldIDName2').val()
                  } );
        }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作来调用它:

$('#myselectid').change(function (e) {
        table.draw();
});
Run Code Online (Sandbox Code Playgroud)

如果要通过单击按钮提交,请更改.change.click并确保ID指向HTML中按钮的ID


mar*_*ith 1

你差不多已经明白了。您只需将过滤器变量分配给数据表请求中传递的数据参数:

"ajax": {
     "url": "/getdata",
     "data": {
     "friend_name": $('#myselectid').val();
    }
} 
Run Code Online (Sandbox Code Playgroud)

要过滤数据,只需调用draw()选择更改事件

$('#myselectid').change(function (e) {
        table.fnDraw();
});
Run Code Online (Sandbox Code Playgroud)