在两个日期选择器之间过滤数据表
Filter datatable between two datepickers
我只想在用户 select 的日期介于两个日期选择器之间时过滤我的数据表。我已经尝试了一个代码,但是当我 select 约会时它没有显示。任何人都知道如何修复我的代码?非常感谢!
这是我试过的:
function implement_cm_table() {
var table = $('#show-cm-table').DataTable({
autoWidth: false,
responsive: true,
dom: '<"datatable-header"fl><"datatable-scroll"t><"datatable-footer"ip>',
language: {
search: '<span>Search</span> _INPUT_',
lengthMenu: '<span>Show:</span> _MENU_',
paginate: { 'first': 'First', 'last': 'Last', 'next': '→', 'previous': '←' }
}
});
$.fn.dataTable.ext.search.push(
function (settings, data, dataIndex) {
var min = $('#from').datepicker('getDate');
var max = $('#to').datepicker('getDate');
var startDate = new Date(data[0]);
if (min == null && max == null) return true;
if (min == null && startDate <= max) return true;
if (max == null && startDate >= min) return true;
if (startDate <= max && startDate >= min) return true;
return false;
}
);
$('#min').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#max').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
// Event listener to the two range filtering inputs to redraw on input
$('#min, #max').change(function () {
table.draw();
});
}
您可以对代码进行以下更改:
- 将您的实现函数包装在文档就绪函数中:
<script type="text/javascript">
$(document).ready(function() {
implement_cm_table();
} );
</script>
- 将
min
和 max
选择器名称更改为 from
和 to
,此处:
$('#from').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#to').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
// Event listener to the two range filtering inputs to redraw on input
$('#from, #to').change(function () {
table.draw();
});
- 现在,您在 2 个不同的地方声明了每个日期选择器。因此,您需要删除此处的初始代码:
<script type="text/javascript">
$('#from').datepicker({ dateFormat: 'yy-mm-dd' });
$('#to').datepicker({ dateFormat: 'yy-mm-dd' });
</script>
...而是将这些日期格式化程序添加到其他 datepicker
声明中,朝向脚本的底部:
$('#from').datepicker({ dateFormat: 'yy-mm-dd', onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#to').datepicker({ dateFormat: 'yy-mm-dd', onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
在我对您的代码版本进行这些更改后,过滤开始正常工作。
基本上,需要文档准备功能来确保页面准备好初始化DataTables。然后您需要修复不正确的日期选择器选择器,并确保每个选择器只声明一次。
我只想在用户 select 的日期介于两个日期选择器之间时过滤我的数据表。我已经尝试了一个代码,但是当我 select 约会时它没有显示。任何人都知道如何修复我的代码?非常感谢!
这是我试过的:
function implement_cm_table() {
var table = $('#show-cm-table').DataTable({
autoWidth: false,
responsive: true,
dom: '<"datatable-header"fl><"datatable-scroll"t><"datatable-footer"ip>',
language: {
search: '<span>Search</span> _INPUT_',
lengthMenu: '<span>Show:</span> _MENU_',
paginate: { 'first': 'First', 'last': 'Last', 'next': '→', 'previous': '←' }
}
});
$.fn.dataTable.ext.search.push(
function (settings, data, dataIndex) {
var min = $('#from').datepicker('getDate');
var max = $('#to').datepicker('getDate');
var startDate = new Date(data[0]);
if (min == null && max == null) return true;
if (min == null && startDate <= max) return true;
if (max == null && startDate >= min) return true;
if (startDate <= max && startDate >= min) return true;
return false;
}
);
$('#min').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#max').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
// Event listener to the two range filtering inputs to redraw on input
$('#min, #max').change(function () {
table.draw();
});
}
您可以对代码进行以下更改:
- 将您的实现函数包装在文档就绪函数中:
<script type="text/javascript">
$(document).ready(function() {
implement_cm_table();
} );
</script>
- 将
min
和max
选择器名称更改为from
和to
,此处:
$('#from').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#to').datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
// Event listener to the two range filtering inputs to redraw on input
$('#from, #to').change(function () {
table.draw();
});
- 现在,您在 2 个不同的地方声明了每个日期选择器。因此,您需要删除此处的初始代码:
<script type="text/javascript">
$('#from').datepicker({ dateFormat: 'yy-mm-dd' });
$('#to').datepicker({ dateFormat: 'yy-mm-dd' });
</script>
...而是将这些日期格式化程序添加到其他 datepicker
声明中,朝向脚本的底部:
$('#from').datepicker({ dateFormat: 'yy-mm-dd', onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
$('#to').datepicker({ dateFormat: 'yy-mm-dd', onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true });
在我对您的代码版本进行这些更改后,过滤开始正常工作。
基本上,需要文档准备功能来确保页面准备好初始化DataTables。然后您需要修复不正确的日期选择器选择器,并确保每个选择器只声明一次。