数据表:如何在init之后禁用过滤

时间:2014-03-10 14:25:14

标签: javascript datatable

在我的页面上,我正在运行一个datatables init脚本,它可以一次初始化多个表。现在让我们说我想改变一些选择,例如禁用过滤,在其中一个表上但不是全部,最好的方法是什么?

示例:http://jsfiddle.net/HEDvf/1165/

$(document).ready(function() {
    $('.dataTable').dataTable({
        "sPaginationType": "full_numbers"
    });
    $('#example2').dataTable({
        "bFilter": false
    });
});

正如您所看到的,我在html中加载了两个表,我通过选择'.datatable'类同时初始化它们,这两个类都有。 然后我想禁用第二个表的过滤,选择这个表我使用id'example2',只有第二个表有。但是,更改此表的设置不起作用,弹出窗口表示我无法重新初始化表,但是否应该更改已初始化表的选项?

1 个答案:

答案 0 :(得分:3)

您可以通过调用不带参数的dataTable来访问现有的DataTable对象:

var dt = $('#example2').dataTable();

我不知道哪些值能够在事后被修改,因此它可能会或可能不会改变它:

dt.DataTable.settings.bFiltered = false;

如果您需要在初始化时执行此操作,我可以考虑两个选项。首先,是在调用dataTable

之前将其过滤掉
$('.dataTable').not('#example2').dataTable(...);
$('#example2').dataTable(.. other options ...);

或者,创建一种在html级别设置这些选项的机制:

$('.dataTable').each(function(k,ele) {
    ele = $(ele);
    var opts = {
      sPaginationType: ele.data('pagination-type') || 'full_numbers',
      bFilter: ele.data('bfilter') !== 'false'
    }
    // or only set it if it exists
    if (ele.data('bfilter')) {
       opts.bFilter = ele.data('bfilter') === 'true';
    }
    ele.dataTable(opts);
 });

这可能有点矫枉过正,但你可以使html类似于:

<div class="datatable" data-bfilter="false" data-pagination-type="mypagination_option"></div>