Vanilla JS
jQuery
Vanilla JS

What is this?

Auto
Light
Dark

What is this?

DataTables example Custom filtering - range search

There may be occasions when you wish to search data presented to the end user in your own manner, common examples are number range searches (in between two numbers) and date range searches. DataTables provides an API method to add your own search functions, DataTable.ext.search. This is an array of functions (push your own onto it) which will will be run at table draw time to see if a particular row should be included or not.

This example shows a search being performed on the age column in the data, based upon two inputs.

Minimum age:
Maximum age:
NamePositionOfficeAgeStart dateSalary
Airi Satou Accountant Tokyo 33 2008-11-28 $162,700
Angelica Ramos Chief Executive Officer (CEO) London 47 2009-10-09 $1,200,000
Ashton Cox Junior Technical Author San Francisco 66 2009-01-12 $86,000
Bradley Greer Software Engineer London 41 2012-10-13 $132,000
Brenden Wagner Software Engineer San Francisco 28 2011-06-07 $206,850
Brielle Williamson Integration Specialist New York 61 2012-12-02 $372,000
Bruno Nash Software Engineer London 38 2011-05-03 $163,500
Caesar Vance Pre-Sales Support New York 21 2011-12-12 $106,450
Cara Stevens Sales Assistant New York 46 2011-12-06 $145,600
Cedric Kelly Senior Javascript Developer Edinburgh 22 2012-03-29 $433,060
NamePositionOfficeAgeStart dateSalary
Showing 1 to 10 of 57 entries

The Javascript shown below is used to initialise the table shown in this example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const minEl = document.querySelector('#min');
const maxEl = document.querySelector('#max');
 
// Custom range filtering function
DataTable.ext.search.push(function (settings, data, dataIndex) {
    let min = parseInt(minEl.value, 10);
    let max = parseInt(maxEl.value, 10);
    let age = parseFloat(data[3]) || 0; // use data for the age column
 
    if (
        (isNaN(min) && isNaN(max)) ||
        (isNaN(min) && age <= max) ||
        (min <= age && isNaN(max)) ||
        (min <= age && age <= max)
    ) {
        return true;
    }
 
    return false;
});
 
const table = new DataTable('#example');
 
// Changes to the inputs will trigger a redraw to update the table
minEl.addEventListener('input', function () {
    table.draw();
});
maxEl.addEventListener('input', function () {
    table.draw();
});

In addition to the above code, the following Javascript library files are loaded for use in this example: