我有一个有时会显示并有时隐藏的数据表。我在同一页面上还有其他几个表格。
数据表示例(located here)使用全局对象存储自定义函数$.fn.dataTable.ext.search
。这很好,但它会影响所有表格。
我无法找到一种方法来提供每个表的搜索功能,而不是将其添加到全局变量。
这是我到目前为止所做的:
t.rows().data().filter(
function(val, idx){
console.log("Value: " + JSON.stringify(val) + " at " + idx);
if(idx < 2) {return true;} return false;
})
这样可行,但我如何用新行重绘表格呢?调用t.draw()不起作用,接下来是什么?
这是编辑前的旧问题:
这是我的过滤器的初始代码,它运行并打印出我期望的内容,但我无法将其隔离为仅在页面上的一个表上运行。我无法分辨它在函数中的哪个表(我不认为),但我真的只想在某个表上调用该函数。
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex )
{
console.log(settings);
console.log(data);
console.log(dataIndex);
});
答案 0 :(得分:2)
您从搜索功能收到的第一个参数是settings
变量,其中包含DataTable的完整配置和数据。这样,您就可以访问表格API。
然后,您可以使用table().node()
到达代码的节点(它返回表格的DOM元素):
var tablesToSearchArray = new Array("example2");
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var api = new $.fn.dataTable.Api( settings );
var tableId = api.table().node().id;
if (tablesToSearchArray.indexOf(tableId) === -1) {
return true; // don't filter this table.
}
var min = parseInt($('#min').val(), 10);
var max = parseInt($('#max').val(), 10);
var age = parseFloat(data[3]) || 0; // use data for the age column
if ( ( isNaN( min ) && isNaN( max ) ) ||
( isNaN( min ) && age <= max ) ||
( min <= age && isNaN( max ) ) ||
( min <= age && age <= max ) )
{
return true;
}
return false;
});
$(document).ready(function() {
var table = $('#example').DataTable();
var table2 = $('#example2').DataTable();
$('#min, #max').keyup(function() {
table.draw();
table2.draw(); // just so you see it won't filter
});
});