数据表日期范围过滤功能与搜索框过滤器冲突
Datatables daterange filtering function conflicting with searchbox filter
我为我的数据表创建了一个日期范围过滤器,它按预期工作。
但是现在搜索框不再像以前那样工作了。
我假设它现在使用我的自定义函数,该函数仅限于日期列。如何指定我的自定义搜索功能仅在触发日期范围应用事件时使用,否则保留默认行为?
这是在 codepen.io 上使用工作日期范围过滤器的代码
https://codepen.io/bintux/pen/rgYeyp
$(function() {
var table = $("#table_1").DataTable();
// Date range vars
minDateFilter = "";
maxDateFilter = "";
$("#daterange").daterangepicker();
$("#daterange").on("apply.daterangepicker", function(ev, picker) {
minDateFilter = Date.parse(picker.startDate.format("YYYY-MM-DD"));
maxDateFilter = Date.parse(picker.endDate.format("YYYY-MM-DD"));
table.draw();
});
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var date = Date.parse(data[1]);
if (
(isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
(isNaN(minDateFilter) && date <= maxDateFilter) ||
(minDateFilter <= date && isNaN(maxDateFilter)) ||
(minDateFilter <= date && date <= maxDateFilter)
) {
return true;
}
return false;
});
});
<table id="table_1" >
<thead>
<tr>
<th>Col1.</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Set 1</td>
<td data-order="1558358405">20 May 2019</td>
</tr>
<tr>
<td>Set2</td>
<td data-order="1558357779">20 May 2019</td>
</tr>
....
我可以在触发日期范围应用时将参数传递给 draw() 函数吗?
多亏了davidkonrad answer on a similar question here,我才得以解决。
刚刚将过滤函数移到了日期范围应用事件函数中。
$("#daterange").on("apply.daterangepicker", function(ev, picker) {
minDateFilter = Date.parse(picker.startDate);
maxDateFilter = Date.parse(picker.endDate);
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var date = Date.parse(data[1]);
if (
(isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
(isNaN(minDateFilter) && date <= maxDateFilter) ||
(minDateFilter <= date && isNaN(maxDateFilter)) ||
(minDateFilter <= date && date <= maxDateFilter)
) {
return true;
}
return false;
});
table.draw();
});
我为我的数据表创建了一个日期范围过滤器,它按预期工作。 但是现在搜索框不再像以前那样工作了。 我假设它现在使用我的自定义函数,该函数仅限于日期列。如何指定我的自定义搜索功能仅在触发日期范围应用事件时使用,否则保留默认行为?
这是在 codepen.io 上使用工作日期范围过滤器的代码 https://codepen.io/bintux/pen/rgYeyp
$(function() {
var table = $("#table_1").DataTable();
// Date range vars
minDateFilter = "";
maxDateFilter = "";
$("#daterange").daterangepicker();
$("#daterange").on("apply.daterangepicker", function(ev, picker) {
minDateFilter = Date.parse(picker.startDate.format("YYYY-MM-DD"));
maxDateFilter = Date.parse(picker.endDate.format("YYYY-MM-DD"));
table.draw();
});
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var date = Date.parse(data[1]);
if (
(isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
(isNaN(minDateFilter) && date <= maxDateFilter) ||
(minDateFilter <= date && isNaN(maxDateFilter)) ||
(minDateFilter <= date && date <= maxDateFilter)
) {
return true;
}
return false;
});
});
<table id="table_1" >
<thead>
<tr>
<th>Col1.</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Set 1</td>
<td data-order="1558358405">20 May 2019</td>
</tr>
<tr>
<td>Set2</td>
<td data-order="1558357779">20 May 2019</td>
</tr>
....
我可以在触发日期范围应用时将参数传递给 draw() 函数吗?
多亏了davidkonrad answer on a similar question here,我才得以解决。 刚刚将过滤函数移到了日期范围应用事件函数中。
$("#daterange").on("apply.daterangepicker", function(ev, picker) {
minDateFilter = Date.parse(picker.startDate);
maxDateFilter = Date.parse(picker.endDate);
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var date = Date.parse(data[1]);
if (
(isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
(isNaN(minDateFilter) && date <= maxDateFilter) ||
(minDateFilter <= date && isNaN(maxDateFilter)) ||
(minDateFilter <= date && date <= maxDateFilter)
) {
return true;
}
return false;
});
table.draw();
});