Javascript 向DataTable对象添加自定义搜索字段
我需要将在页面上创建的字段添加到DataTable对象。即使它们不是典型的参数(顺序、搜索、分页等),它们也可以与其他数据表的对象状态一起保存和加载 JavaScriptJavascript 向DataTable对象添加自定义搜索字段,javascript,jquery,datatables,Javascript,Jquery,Datatables,我需要将在页面上创建的字段添加到DataTable对象。即使它们不是典型的参数(顺序、搜索、分页等),它们也可以与其他数据表的对象状态一起保存和加载 JavaScript $(document).ready(function () { var table = $('#stackoverflow-datatable').DataTable({ "processing": true, "stateSave": true,
$(document).ready(function () {
var table = $('#stackoverflow-datatable').DataTable({
"processing": true,
"stateSave": true,
"stateSaveCallback": function (settings, data) {
$.ajax({
"url": "/api/save_state",
"data": data,
"dataType": "json",
"success": function (response) {}
});
},
"stateLoadCallback": function (settings) {
var o;
$.ajax({
"url": "/api/load_state",
"async": false,
"dataType": "json",
"success": function (json) {
o = json;
}
});
return o;
}
});
});
然后,我认为可以向对象添加字段的JavaScript如下所示
<script type="text/javascript">
$.fn.dataTableExt.afnFiltering.push(
function (settings, data) {
var dateStart = parseDateValue($("#dateStart").val());
var dateEnd = parseDateValue($("#dateEnd").val());
var evalDate = parseDateValue(data[9]);
return evalDate >= dateStart && evalDate <= dateEnd;
}
);
function getDate(element) {
return $.datepicker.parseDate('mm/dd/yy', element.value);
}
// Convert mm/dd/yyyy into numeric (ex. 08/12/2010 -> 20100812)
function parseDateValue(rawDate) {
var dateArray = rawDate.split("/");
return dateArray[2] + dateArray[0] + dateArray[1];
}
</script>
$.fn.dataTableExt.afnFiltering.push(
功能(设置、数据){
var dateStart=parseDateValue($(“#dateStart”).val();
var dateEnd=parseDateValue($(“#dateEnd”).val();
var evalDate=parseDateValue(数据[9]);
返回evalDate>=日期开始(&evalDate 20100812)
函数parseDateValue(rawDate){
var dateArray=rawDate.split(“/”);
返回dateArray[2]+dateArray[0]+dateArray[1];
}
HTML
<input type="text" id="dateStart" class="datepicker" name="dateStart">
<input type="text" id="dateEnd" class="datepicker" name="dateEnd">
<table id="stackoverflow-datatable">
<thead>
<th>ID</th>
<th>Name</th>
<th>Date</th>
</thead>
身份证件
名称
日期
要实现自定义范围搜索,请使用:
$.fn.dataTable.ext.search.push
要保存和加载自定义状态参数,请使用:
stateSaveParams: function (settings, data) {}
stateLoadParams: function (settings, data) {}
您必须将事件侦听器附加到日期选择器,以便在每次更改开始日期或结束日期时重新绘制表,但在恢复表状态时,您还必须填写输入字段。这可能很棘手,因为选择器和表之间存在交叉依赖关系,因此我引入了一个自定义事件以确保日期选择器状态在创建后恢复
我已经基于您的代码创建了一个工作示例,使用静态表:
So'search.push'将这些内容添加到DataTable对象中?您是否尝试过转到其他页面并返回查看它是否记住值?因为我使用的JSFIDLE中的所有内容都非常适合过滤/搜索。但是,DataTables搜索字段会记住其值,但添加的自定义字段是:startDate,endDate仍未添加到Datable输出对象中的“搜索”区域。不,您需要其他API方法。我已更新了答案和代码,以包含您的所有要求。我已在localhost上测试了脚本,并保留了表状态以及自定义字段。