数据表获取行数据,然后执行fn.dataTable.ext.search.push

时间:2016-11-21 08:00:04

标签: jquery json ajax filter datatables

我的提醒正在运行,但我不知道如何使用rowData过滤我的其他数据表实例。 这是我的代码:http://codepen.io/smuglovsky/pen/YpNjXm?editors=1010

我学会了如何点击每一行并获取数据"在这里:https://datatables.net/release-datatables/examples/advanced_init/events_live.html

我还发现了如何从被点击的行中获取数据"在这里:https://datatables.net/reference/type/row-selector

我知道我几乎就在那里,但是我被困在我的代码笔的第460行:

  $('#example-sections tbody').on('click', 'tr', function() {
    var data = table_sections.row(this).data();
    var rowData = table_sections.row(this).data();
    // ... do something with rowData
    alert('You clicked on ' + data[0] + '\'s row');
    $.fn.dataTable.ext.search.push(
      function(settings, data, rows, dataIndex, rowIndex, rowData) {
        // I want to filter the rowData, just like the alert is doing
        return data[0] == +data[0] ? true : false;
      }
    );
    table_main.draw();
    table_books.draw();
    $.fn.dataTable.ext.search.pop();
  });

1 个答案:

答案 0 :(得分:1)

因此,使用“$ .fn.dataTable.ext.search”会向所有数据表实例添加搜索自定义函数。我认为你想要的是使用特定网格行点击中的值过滤其他DataTable实例。如果是这样,你会想要稍微改变一下这个问题。

以下解决方案假定“example-sections”网格的第一列对应于要在“table_main”和“table_books”列中搜索的列。如果是这样,您只需使用索引获取“table_main”和“table_books”的列,并使用您单击的行中的数据将搜索应用于该列。

$('#example-sections tbody').on('click', 'tr', function() {
  var rowData = table_sections.row(this).data();
  // ... do something with rowData
  alert('You clicked on ' + rowData[0] + '\'s row');

  // Lets build a regular expression that will give only exact matches.
  var searchRegExp = new RegExp("^" + rowData[0] + "$");

  // Ok so we are going to use a regex.  Second param is to turn on
  // search by a regular expression.  The third param is to turn off "smart"
  // searching which would conflict.  The last param is to turn off case 
  // insensitive matching.
  table_main.column(0).search(searchRegExp, true, false, false).draw();
  table_books.column(0).search(searchRegExp, true, false, false).draw();
});

注意:对于“table_main.column(0)”,“0”是数据集中列的索引,因此如果您有隐藏列,那么这些列将计入此索引。例如,假设我的第一个可见列是“ID”列,但我有两个隐藏列,在“ID”列之前的“列”定义中定义,然后“ID”列的索引将为“2”而不是“0”。

编辑:将搜索更改为仅返回完全匹配。参考:https://datatables.net/reference/api/search()