Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

CSS와 JavaScript로 드롭다운 메뉴 항목 검색 기능 구현하기

CSS와 JavaScript를 활용하면 드롭다운 메뉴 안에서 원하는 항목을 실시간으로 검색하고 필터링하는 기능을 손쉽게 구현할 수 있습니다. 아래는 전체 예제 코드와 함께 각 부분의 동작 방식까지 상세히 설명합니다.

예제 코드

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
    .dropbtn {
        background-color: rgb(76, 78, 175);
        color: white;
        padding: 16px;
        font-size: 16px;
        border: none;
        cursor: pointer;
    }
    .dropbtn:hover, .dropbtn:focus {
        background-color: #4f3e8e;
    }
    .searchField {
        box-sizing: border-box;
        font-size: 16px;
        padding: 14px 20px 12px 45px;
        border: none;
        border-bottom: 1px solid #ddd;
    }
    .searchField:focus {outline: 3px solid #ddd;}
    .dropdown {
        position: relative;
        display: inline-block;
    }
    .dropdownList {
        display: none;
        position: absolute;
        background-color: #f6f6f6;
        min-width: 230px;
        overflow: auto;
        border: 1px solid #ddd;
        z-index: 1;
    }
    .dropdownList a {
        color: black;
        padding: 12px 16px;
        text-decoration: none;
        display: block;
    }
    .dropdown a:hover {background-color: #ddd;}
    .show {display: block;}
</style>
</head>
<body>
<h1>Search/filterText Dropdown Example</h1>
<div class="dropdown">
<button class="dropbtn" onclick="showDropList()">Dropdown</button>
<div id="myDropdown" class="dropdownList">
<input type="text" placeholder="Search.." class="searchField">
<a href="#">Cow</a>
<a href="#">Cat</a>
<a href="#">Dog</a>
<a href="#">Giraffe</a>
<a href="#">Lion</a>
<a href="#">Leopard</a>
<a href="#">Cheetah</a>
</div>
</div>
<script>
    function showDropList(){
        let dropDiv = document.querySelector('.dropdownList');
        if(dropDiv.style.display==="block"){
            dropDiv.style.display = "";
        } else {
            dropDiv.style.display = "block";
        }
    }
    document.querySelector('.searchField').addEventListener('keyup',filterDropdown);
    function filterDropdown() {
        var inputSearch, filterText, ul, li, links, i,div;
        inputSearch = document.querySelector(".searchField");
        filterText = inputSearch.value.toUpperCase();
        div = document.getElementById("myDropdown");
        links = div.getElementsByTagName("a");
        for (i = 0; i < links.length; i++) {
            txtValue = links[i].textContent || links[i].innerText;
            if (txtValue.toUpperCase().indexOf(filterText) > -1) {
                links[i].style.display = "";
            } else {
            links[i].style.display = "none";
            }
        }
    }
</script>
</body>
</html>

실행 결과

위 코드를 브라우저에서 실행하면 다음과 같은 화면이 출력됩니다.

CSS와 JavaScript로 드롭다운 메뉴 항목 검색 기능 구현하기

드롭다운 버튼을 클릭한 후 검색 필드에 텍스트를 입력하면, 입력값과 일치하는 항목만 남기고 나머지는 자동으로 숨겨집니다.

CSS와 JavaScript로 드롭다운 메뉴 항목 검색 기능 구현하기

코드 동작 방식

1. 드롭다운 열기 및 닫기: showDropList() 함수는 버튼 클릭 시 .dropdownList 요소의 현재 display 값을 확인합니다. 값이 block이라면 초기화하여 목록을 닫고, 그렇지 않다면 block으로 설정해 목록을 열어줍니다.

2. 실시간 검색 필터링: 검색 입력창(.searchField)에 keyup 이벤트가 발생할 때마다 filterDropdown() 함수가 호출됩니다. 이 함수는 사용자가 입력한 텍스트를 대문자로 변환한 후, 드롭다운 내부의 모든 링크(<a> 태그)의 텍스트와 비교합니다. 입력값을 포함하는 항목은 그대로 표시되고, 포함하지 않는 항목은 display: none 처리되어 목록에서 사라집니다.

3. 대소문자 무관 검색: 입력값과 항목 텍스트 모두 toUpperCase()로 변환한 후 비교하므로, 사용자가 대문자나 소문자를 어떻게 입력했더라도 동일한 검색 결과를 얻을 수 있습니다.