Таблица с фильтрацией

Здесь вы узнаете, как отфильтровать содержимое таблицы при помощи JavaScript.


Фильтрация таблицы

Как при помощи JavaScript искать заданные данные в таблице.

ИмяСтрана
Alfreds FutterkisteGermany
Berglunds snabbkopSweden
Island TradingUK
Koniglich EssenGermany
Laughing Bacchus WinecellarsCanada
Magazzini Alimentari RiunitiItaly
North/SouthUK
Paris specialitesFrance
Попробовать самому »

Как создать фильтрацию таблицы

Шаг 1) Добавляем HTML:

Пример


<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Поиск по именам..">

<table id="myTable">
  <tr class="header">
    <th style="width:60%;">Имя</th>
    <th style="width:40%;">Страна</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Berglunds snabbkop</td>
    <td>Sweden</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Koniglich Essen</td>
    <td>Germany</td>
  </tr>
</table>

Шаг 2) Добавляем CSS:

Создаем стили элемента ввода и таблицы:

Пример


#myInput {
  background-image: url('searchicon.png'); /* Добавляем иконку лупы к элементу ввода */
  background-position: 10px 12px; /* Позиционируем иконку лупы */
  background-repeat: no-repeat; /* Вывод иконки только один раз */
  width: 100%; /* Элемент ввода на всю ширину */
  font-size: 16px; /* Размер шрифта */
  padding: 12px 20px 12px 40px; /* Внутренние отступы */
  border: 1px solid #ddd; /* Добавим серую рамку */
  margin-bottom: 12px; /* Добавим наружный отступ под элементом ввода */
}

#myTable {
  border-collapse: collapse; /* У ячеек будет общая рамка */
  width: 100%; /* Таблица на всю ширину */
  border: 1px solid #ddd; /* Добавим серую рамку */
  font-size: 18px; /* Размер шрифта */
}

#myTable th, #myTable td {
  text-align: left; /* Выравнивание текста по левому краю */
  padding: 12px; /* Добавим внутренние отступы */
}

#myTable tr {
  /* Добавим рамку внизу у всех рядов таблицы */
  border-bottom: 1px solid #ddd;
}

#myTable tr.header, #myTable tr:hover {
  /* Добавим серый фон у заголовка таблицы и при наведении курсора */
  background-color: #f1f1f1;
}

Шаг 3) Добавляем JavaScript:

Пример


function myFunction() {
  // Декларируем переменные
  var input, filter, table, tr, td, i, txtValue;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");

  // Цикл по всем рядам таблицы. Скрываем не соответствующие строке поиска
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    if (td) {
      txtValue = td.textContent || td.innerText;
      if (txtValue.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }
  }
}

Попробовать самому »

Совет: Если вы хотите, чтобы поиск был регистрозависимым, в коде JavaScript следует убрать вызов метода toUpperCase().

Совет: Измените tr[i].getElementsByTagName('td')[0] на [1], если вы хотите, чтобы поиск происходил по столбцу "Страна" (индекс 1), а не "Имя" (индекс 0).