테이블 필터링/검색 방법

JavaScript를 사용하여 필터 가능한 테이블을 만드는 방법을 배우세요.

테이블 필터링

JavaScript를 사용하여 테이블에서 특정 데이터를 검색하는 방법.

Name Country
Alfreds Futterkiste Germany
Berglunds snabbkop 스웨덴
Island Trading UK
Koniglich Essen Germany
Laughing Bacchus Winecellars Canada
Magazzini Alimentari Riuniti Italy
North/South UK
Paris specialites France

직접 시도해보세요

필터 가능한 테이블 생성

第一步 - HTML 추가:

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Names을 검색하세요..">
<table id="myTable">
  <tr class="header">
    <th style="width:60%;">Name</th>
    <th style="width:40%;">Country</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>

第二步 - CSS 추가:

입력 요소와 테이블의 스타일 설정:

#myInput {
  background-image: url('/css/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;
}

세 번째 단계 - JavaScript 추가:

<script>
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";
      }
    }
  }
}
</script>

직접 시도해보세요

ヒント:대소문자 구분 없이 검색하려면 toUpperCase()

ヒント:국가(인덱스 1)를 "이름"(인덱스 0) 대신 검색하려면 tr[i].getElementsByTagName('td')[0] 更多改为 [1]。

相关页面

教程:如何过滤/搜索列表