2015-07-10 82 views
1

我目前正在为web应用程序的页面工作,该页面显示jQuery DataTable中的成员数据。我正在构建DataTable的自定义插件,该插件允许对每个表格列进行各种过滤。我可以从jQuery DataTable中检索列/搜索特定数据吗?

我目前的任务是能够从DataTable检索过滤的数据,虽然没有更新表上的数据。我已经知道可以通过做检索所有过滤的数据:

var data = $table.dataTable().$('tr', { filter: 'applied' }); 

这对于在搜索框中输入任何文字,并应用到列的任何过滤器获取数据。我也知道这个调用获取单元格的jQuery选择器。这就是我需要的。但我需要更多...

我的问题是:

  1. 我可以只申请什么在搜索框中获取数据,而不适用于列其他任何现有的过滤器?我试过:

    var data = $ table.dataTable()。$('tr',{search:'applied'});

但是,返回与{filter:'applied'}相同。

  • 是否可以将用于获取数据的特定列,例如:

    VAR数据= $ table.dataTable()$( 'TR',{滤波器:'应用',列:[1,2,5]});

  • 我可以定位特定列和搜索框中的内容吗?

  • 我的插件需要能够跟踪应用了列/搜索过滤器的各种组合的数据。

    回答

    3

    对于数据表1.9

    有一个fnFilter() API方法,但它适用于过滤,这是不是你想要的表。

    或者,您可能希望使用fnGetData()来获取整个表的数据并自行过滤。

    对于数据表1.10

    有一个search() API方法,但它适用于过滤与draw()使用的是不是你想要当表。

    另外还有filter() API方法。这不完全是你要找的东西,但非常接近,但是你需要自己进行搜索。

    如下您可以获取搜索框的内容:

    var searchVal = $('.dataTables_filter input', $table).val(); 
    

    那么你就需要做搜索自己,如下图所示是一个简单的方法可能不匹配的DataTable内部如何进行搜索。

    要仅搜索第一列和第二列,请指定[0,1]columns()方法。如果没有指定参数,则将搜索所有列。

    var filteredData = $table.DataTable() 
        .columns([0, 1]) 
        .data() 
        .eq(0) 
        .filter(function (value, index) { 
         returrn (value.search(new RegExp(searchVal, "i")) !== -1) 
          ? true : false; 
        }); 
    

    根据手册,可变filteredData将包含与从结果集,其通过在回调测试的值的新的API的实例。

    要检索所有或选定列的数据,请使用columns().data()

    +1

    +1一个伟大的答案!我可以看到我如何执行自己的搜索算法以实现我想要的结果。我曾考虑过这种方法,但希望{filter:'applied'}调用具有列和/或单个搜索值的参数。似乎并非如此。我想让我的插件适用于1.9和1.10以上的版本,所以我将无法使用新的API语法。 – Sebbo

    +0

    @Sebbo,当你在你的问题中使用'filter:'applied''来获取搜索框中任何文本的数据和**应用于列的任何过滤器**,你的意思是**任何过滤器**搜索框?也许解决方案比我想象的更简单。 $ table.DataTable()。rows({search:'applied'}).nodes()。to $()'为你工作吗? –

    +0

    我的意思是,如果单独应用于列的过滤器,比如'$ table.fnFilter('some filter text',columnIndex);'那么过滤器包含在'filter:'applied''中呼叫。现在我有一个解决方案(用于版本1.9),它将你的想法和其他逻辑结合起来。将您的标记为最佳答案。 – Sebbo