QP School

Full Version: Filter tables with JQuery
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
The HTML part between the <body></body> tags looks like this:

Code:
<h2>Filterable Table</h2>
<p>Type something in the input field to search the table for first names, last names or emails:</p>
<input id="myInput" type="text" placeholder="Search...">
<br><br>

<table>
  <thead>
    <tr>
      <th>First name</th>
      <th>Last name</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody id="myTable">
    <tr>
      <td>John</td>
      <td>Doe</td>
      <td>john@example.com</td>
    </tr>
    <tr>
      <td>Mary</td>
      <td>Moe</td>
      <td>mary@example.com</td>
    </tr>
    <tr>
      <td>July</td>
      <td>Dooley</td>
      <td>july@example.com</td>
    </tr>
    <tr>
      <td>Anja</td>
      <td>Ravendale</td>
      <td>a_r@example.com</td>
    </tr>
  </tbody>
</table>

<p>Note that we start the search in tbody, to prevent filtering the table headers.</p>

The CSS part looks like this:

Code:
table
{
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th
{
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even)
{
  background-color: #dddddd;
}

The JQuery part looks like this:

Code:
$(document).ready(function()
                 {
  $("#myInput").on("keyup", function()
                  {
    var value = $(this).val().toLowerCase();
    $("#myTable tr").filter(function()
                           {
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    });
  });
});

You can see the full source code on my CodePen