JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.7/css/jquery.dataTables.css">
<script src="https://cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"></script>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>33</td>
<td>2008/11/28</td>
<td>$162,700</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>New York</td>
<td>61</td>
<td>2012/12/02</td>
<td>$372,000</td>
...
JavaScript
$(document).ready(function() {
var data = $("#example");
data.DataTable();
$("input[type=search]")
.on("keyup", {
// if input , delay until no input for 1.2 seconds
"delay": 1200
}, function(e) {
var elem = $(this);
var update = function update() {
// wait 1.2 seconds to update `val` with "hint"
if ($.now() - e.timeStamp > e.data.delay
&& e.target.value.length > 0 && !/^\s/.test(e.target.value)) {
var val = e.target.value.toLowerCase();
// filter `.DataTable().data()`
// return items where first index matches `val`
var res = $.grep(data.DataTable().data(), function(value, key) {
console.log(new RegExp(val, "i").test(value[0]) )
return val === value[0].slice(0, val.length).toLowerCase()
|| new RegExp(val, "i").test(value[0])
})
// sort returned data
.sort()
// filter returned data `res` for match to `val`
.filter(function(hint) {
return hint[0].toLowerCase().slice(0, val.length) === val
|| new RegExp(val, "i").test(hint)
})[0];
elem.val(res[0])
.css({
"color": "grey",
"fontStyle": "italic"
});
} else {
return elem.queue("update", update)
}
};
var defer = function defer(next) {
// if input before 1.2 seconds ,
// empty `"update"` queue , delay calling
// update until no input for 1.2 seconds
elem.queue("update", [])
elem.delay(e.data.delay, "update")
.queue("update").push(update);
return next()
};
// if input, do stuff
if (e.target.value.length > 0) {
elem
.queue("update", defer)
.dequeue("update")
} else {
elem
.queue("update", [])
}
}).keyup()
});