Вот мое окончательное решение: jsfiddle
$.fn.dataTable.ext.search.push(
function( settings, data, dataIndex ) {
var min_id = parseInt( $('#min_id').val(), 10 );
var max_id = parseInt( $('#max_id').val(), 10 );
var id = parseFloat( data[0] ) || 0; // use data for the id column
var min_price = parseInt( $('#min_price').val(), 10 );
var max_price = parseInt( $('#max_price').val(), 10 );
var price = parseFloat( data[1] ) || 0;
var title = $('#title').val();
var title_data = data[2] || '';
if (
(
( isNaN( min_id ) && isNaN( max_id ) ) ||
( isNaN( min_id ) && id <= max_id ) ||
( min_id <= id && isNaN( max_id ) ) ||
( min_id <= id && id <= max_id )
)
&& (
( isNaN( min_price ) && isNaN( max_price ) ) ||
( isNaN( min_price ) && price <= max_price ) ||
( min_price <= price && isNaN( max_price ) ) ||
( min_price <= price && price <= max_price )
)
&& (
( title == '' ) ||
( title != '' && title_data.toLowerCase().includes(title.toLowerCase()) )
)
)
{
return true;
}
return false;
}
);
$(document).ready(function() {
var table = $('#searchresults').DataTable( {
orderCellsTop: true,
fixedHeader: true,
paging: false,
language: {
url: '//cdn.datatables.net/plug-ins/1.10.19/i18n/German.json'
}
});
// Event listeners to the two range filtering inputs to redraw on input
$('#min_id, #max_id').keyup( function() {
table.draw();
} );
$('#min_price, #max_price').keyup( function() {
table.draw();
} );
$('#title').keyup( function() {
table.draw();
} );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/fixedheader/3.1.5/js/dataTables.fixedHeader.min.js"></script>
<table class="datatable" id="searchresults">
<thead>
<tr>
<th>id</th>
<th>price</th>
<th>title</th>
</tr>
<tr role="row">
<th>
<div style="white-space:nowrap;">
<input type="text" id="min_id" name="min_id" size="3" placeholder="from">
<input type="text" id="max_id" name="max_id" size="3" placeholder="to">
</div>
</th>
<th>
<div style="white-space:nowrap;">
<input type="text" id="min_price" name="min_price" size="3" placeholder="from">
<input type="text" id="max_price" name="max_price" size="3" placeholder="to">
</div>
</th>
<th>
<input type="text" id="title" name="title" size="10">
</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>candies</td>
</tr>
<tr>
<td>2</td>
<td>6</td>
<td>book</td>
</tr>
<tr>
<td>3</td>
<td>25</td>
<td>mouse</td>
</tr>
<tr>
<td>4</td>
<td>29</td>
<td>keyboard</td>
</tr>
<tr>
<td>5</td>
<td>19</td>
<td>red wine</td>
</tr>
<tr>
<td>6</td>
<td>16</td>
<td>white wine</td>
</tr>
<tr>
<td>7</td>
<td>29</td>
<td>red wine</td>
</tr>
<tr>
<td>8</td>
<td>49</td>
<td>red wine</td>
</tr>
<tr>
<td>9</td>
<td>29</td>
<td>white wine</td>
</tr>
</tbody>
</table>
Если таблица результатов получила сотни записей, то при наборе текста происходит небольшая задержка.Я пытаюсь сделать это немного более плавным.