본문 바로가기
JavaScript

JavaScript <검색 필터링>

by wlals5855 2024. 6. 12.

<HTML>

 <h2>실시간 검색 필터</h2>
  <input 
    type="text"
    id="search-input"
    placeholder="여기에 검색어를 입력해주세요."
  >
  <ul id="item-list">
    <li>사과</li>
    <li>바나나</li>
    <li>오렌지</li>
    <li>망고</li>
    <li>포도</li>
    <li>키위</li>
    <li>체리</li>
    <li>딸기</li>
    <li>기러기</li>
    <li>사진</li>
  </ul>

  <div id="no-result">검색 결과가 없습니다.</div>

 

 

검색창에 입력한 검색어가 아이템리스트 중에 동일한 단어가 있으면 리스트에 반환을 하도록 할 것이다.

'검색 결과가 없습니다.'는  검색창에 입력한 검색어가 아치템 리스트에 맞는게 없을 경우 문자을 반환하도록 만들 것이다.

document.addEventListener('DOMContentLoaded', function() {

  const inputField = document.getElementById('search-input');
  const list = document.getElementById('item-list');
  const items = document.querySelectorAll('li');
  const noResult = document.getElementById('no-result');

먼저 웹문서가 모두 로드된 이후 실행할 JS이벤트를 등록한다.

HTML요소드을 getElementById와 querySelectorAll을 사용해 가져온다.

  inputField.addEventListener('input', function() {
    let value = inputField.value.toLowerCase();

    let visibleItemsCount = 0;
  • 검색어 입력 이벤트 핸들러 정의 한다.
  • input에 입력되는 value값을 소문자로 전환해서 value 변수에 할당한다.
  • 필터링 적용 후 화면에 표시되는 항목의 개수를 카운트을 하기 위해 변수를 초기화 한다.
items.forEach(item => {

      if (item.textContent.toLowerCase().includes(value)) {
        item.style.display = '';
        visibleItemsCount++;
      } else {
        item.style.display = 'none';
      }
    });
    noResult.style.display = visibleItemsCount > 0 ? 'none' : 'block';
  • items는 list <li> 요소이다. forEach메서드를 사용하여 각 item에 반복 적용을 한다.
  • item.textContent로 텍스트 내용 을가져온다 toLowerCase() 텍스트 내용을 소문자로 변환하여,
  • 대소문자 구분없이 비교 가능하다.
  • includes(value)로 value가 item.textContent에 포함되어 있는지 확인한다. 포함되면

  • true
    • item요소에 display속성을 빈배열로 설정하면 요소가 CSS에서 정의된 기본 display값으로 복원한다. 
    • visibleItemsCount++는 화면에 표시되는 요소의 개수를 세기 위해 후위연산자를 사용하단.
  • false
    •  display 속성을 none으로 처리해서 요소를 화면에 숨긴다.
  • noResult.style.display = visibleItemsCount > 0 ? 'none' : 'block';
    • 필터링 결과에 따라 아무 항목도 표시되지 않는 경우를 처리
    • visibleItemsCount가 0보다 크면 noResult 요소를 숨기고(display: none),
      그렇지 않으면 noResult 요소를 화면에 표시
    • display: block 이 코드는 검색 결과가 없을 때 "결과 없음" 메시지를 보여주는 데 사용

 

 

 

 

See the Pen Untitled by als5855 (@als5855) on CodePen.