jQuery DataTables - 调用多个插件? (日期范围/范围搜索)
jQuery DataTables - Calling multiple plug-ins? (date range / range search)
如何将这 2 个插件组合到我的 jquery 数据表设置中?
当我删除其中一个时,剩下的一个有效(例如:删除日期范围,使用数字进行范围搜索有效)。我在下面链接了两者。
调用 DataTable 后,我将调用 table.draw() 以根据我对范围选择器或日期选择器的输入更新所有内容。
$(document).ready(function(){
var table = $('#example').DataTable();
}
我在想我的错误是我设置 $.fn.dataTable.ext.search.push 的方式 - 我已经检查了无数次我的 ID 是正确的而且数据索引也是正确的。如前所述,我删除了其中一个插件,另一个有效。我尝试了在网上找到的其他几个示例,但一无所获。
$.fn.dataTable.ext.search.push(
function( settings, data, dataIndex ) {
var min = parseInt( $('#minNumber').val(), 10 );
var max = parseInt( $('#maxNumber').val(), 10 );
var risk = parseFloat( data[0] ) || 0;
var minDateTime = minDate.val();
var maxDateTime = maxDate.val();
var date = new Date( data[1] );
if ( ( isNaN( min ) && isNaN( max ) ) ||
( isNaN( min ) && risk <= max ) ||
( min <= risk && isNaN( max ) ) ||
( min <= risk && risk <= max ) )
{
return true;
}
if (
( minDateTime === null && maxDateTime === null ) ||
( minDateTime === null && date <= maxDateTime ) ||
( minDateTime <= date && maxDateTime === null ) ||
( minDateTime <= date && date <= maxDateTime )
) {
return true;
}
return false;
}
);
您需要将数字范围检查器的逻辑与日期范围检查器的逻辑结合起来。您希望在单个 if
语句中评估所有 4 个输入字段以确定是否应隐藏或显示记录。
目前它们作为 2 个独立的代码段运行,一个接一个。
将它们与 &&
运算符组合:
if (((isNaN(min) && isNaN(max)) ||
(isNaN(min) && risk <= max) ||
(min <= risk && isNaN(max)) ||
(min <= risk && risk <= max)) &&
(
(minDateTime === null && maxDateTime === null) ||
(minDateTime === null && date <= maxDateTime) ||
(minDateTime <= date && maxDateTime === null) ||
(minDateTime <= date && date <= maxDateTime)
))
{
return true;
} else {
return false;
}
以上逻辑可能难以阅读 - 因此等效方法如下:
var withinRisk = (
( isNaN( min ) && isNaN( max ) ) ||
( isNaN( min ) && risk <= max ) ||
( min <= risk && isNaN( max ) ) ||
( min <= risk && risk <= max )
);
var withinDates = (
( minDateTime === null && maxDateTime === null ) ||
( minDateTime === null && date <= maxDateTime ) ||
( minDateTime <= date && maxDateTime === null ) ||
( minDateTime <= date && date <= maxDateTime )
);
if (withinRisk && withinDates) {
return true;
} else {
return false;
}
在这里,我们将两个范围检查分开,只在最后合并它们。
如何将这 2 个插件组合到我的 jquery 数据表设置中?
当我删除其中一个时,剩下的一个有效(例如:删除日期范围,使用数字进行范围搜索有效)。我在下面链接了两者。
调用 DataTable 后,我将调用 table.draw() 以根据我对范围选择器或日期选择器的输入更新所有内容。
$(document).ready(function(){
var table = $('#example').DataTable();
}
我在想我的错误是我设置 $.fn.dataTable.ext.search.push 的方式 - 我已经检查了无数次我的 ID 是正确的而且数据索引也是正确的。如前所述,我删除了其中一个插件,另一个有效。我尝试了在网上找到的其他几个示例,但一无所获。
$.fn.dataTable.ext.search.push(
function( settings, data, dataIndex ) {
var min = parseInt( $('#minNumber').val(), 10 );
var max = parseInt( $('#maxNumber').val(), 10 );
var risk = parseFloat( data[0] ) || 0;
var minDateTime = minDate.val();
var maxDateTime = maxDate.val();
var date = new Date( data[1] );
if ( ( isNaN( min ) && isNaN( max ) ) ||
( isNaN( min ) && risk <= max ) ||
( min <= risk && isNaN( max ) ) ||
( min <= risk && risk <= max ) )
{
return true;
}
if (
( minDateTime === null && maxDateTime === null ) ||
( minDateTime === null && date <= maxDateTime ) ||
( minDateTime <= date && maxDateTime === null ) ||
( minDateTime <= date && date <= maxDateTime )
) {
return true;
}
return false;
}
);
您需要将数字范围检查器的逻辑与日期范围检查器的逻辑结合起来。您希望在单个 if
语句中评估所有 4 个输入字段以确定是否应隐藏或显示记录。
目前它们作为 2 个独立的代码段运行,一个接一个。
将它们与 &&
运算符组合:
if (((isNaN(min) && isNaN(max)) ||
(isNaN(min) && risk <= max) ||
(min <= risk && isNaN(max)) ||
(min <= risk && risk <= max)) &&
(
(minDateTime === null && maxDateTime === null) ||
(minDateTime === null && date <= maxDateTime) ||
(minDateTime <= date && maxDateTime === null) ||
(minDateTime <= date && date <= maxDateTime)
))
{
return true;
} else {
return false;
}
以上逻辑可能难以阅读 - 因此等效方法如下:
var withinRisk = (
( isNaN( min ) && isNaN( max ) ) ||
( isNaN( min ) && risk <= max ) ||
( min <= risk && isNaN( max ) ) ||
( min <= risk && risk <= max )
);
var withinDates = (
( minDateTime === null && maxDateTime === null ) ||
( minDateTime === null && date <= maxDateTime ) ||
( minDateTime <= date && maxDateTime === null ) ||
( minDateTime <= date && date <= maxDateTime )
);
if (withinRisk && withinDates) {
return true;
} else {
return false;
}
在这里,我们将两个范围检查分开,只在最后合并它们。