Searching / Filtering Using Javascript And CSS3 Trick

Allure Web Solutions Code Snippet

How to implement a simple CSS based search using only JavaScript. There aren’t many use cases for this functionality, but if it matches what you’re trying to accomplish, it’s blazing fast and lean. There are some limitations which include only being able to search for what appears in the data-index attribute.

Demo

See the Pen Search / Filtering Using Javascript And CSS3 Trick by Mike Doubintchik (@allurewebsolutions) on CodePen.

The HTML

 <!-- Search box -->
    <input type="text" placeholder="Search" id="search">

    <!-- Search results displayed inside these style tags !-->
    <style id="search-results"></style>
    
    <!-- Sample data -->
    <table>
      <tr>
        <th>First Name</th>
        <th>Last Name</th>
      </tr>
      <tr class="searchable" data-index="jon snow">
        <td>Jon</td>
        <td>Snow</td>
      </tr>
      <tr class="searchable" data-index="james bond">
        <td>James</td>
        <td>Bond</td>
      </tr>
      <tr class="searchable" data-index="shawn the sheep">
        <td>Shawn</td>
        <td>The Sheep</td>
      </tr>
      <tr class="searchable" data-index="yo yo ma">
        <td>Yo Yo</td>
        <td>Ma</td>
      </tr>
    </table>
  </div>

The JavaScript

// define variable
var searchResults = document.getElementById("search-results");
var searchBox = document.getElementById("search");

// add even listener to the search box
searchBox.addEventListener("input", function() {
  // if no results found, search results are empty
  if (!this.value) {
    searchResults.innerHTML = "No results";
    return;
  }

  // if characters typed in search box don't match any data-index, hide with display: none
  searchResults.innerHTML =
    '.searchable:not([data-index*="' +
    this.value.toLowerCase() +
    '"]) { display: none; }';
});

// Credits: http://www.redotheweb.com/2013/05/15/client-side-full-text-search-in-css.html
Mike Doubintchik

Author Mike Doubintchik

More posts by Mike Doubintchik

Leave a Reply