예제로 공부하기

CSS 속성 검색 창을 만들어 보자

Hyeon been 2023. 3. 23. 15:32

한번씩 읽고 가세요.

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90

css속성 검색하기

 

코드

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>검색이펙트</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/search.css">
</head>
<body class="pink">
    <header id="header">
        <ul>
            <li class="active"><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">3</a></li>
            <li><a href="#">4</a></li>
            <li><a href="#">5</a></li>
            <li><a href="#">6</a></li>
        </ul>
    </header>
    <main id="main">
        <div class="search__wrap">
            <div class="search__header">
                <h2 class="title">자바스크립트</h2>
            </div>
            <div class="search__conts">
                    <hgroup>
                        <h3>CSS속성 검색하기</h3>
                        <h4>indexOf()/ search()</h4>
                    </hgroup>
                    <div class="search__box">
                        <label for="search">검색하기</label>
                        <input type="text"  name="search" id="search" placeholder="CSS 속성을 입력해주세요!">
                    </div>
                    <div class="search__info">
                        <div>
                            CSS속성 갯수 : <span></span>개
                        </div>
                    </div>
                <div class="search__list">
                                </div>
            </div>
        </div>
    </main>
    <footer id="footer">
        <a href="mailto:esansi@naver.com">esansi@naver.com</a></footer>
    </footer>
    <script>
        //선택자
        const searchBox = document.querySelector(".search__box input")
        const searchList = document.querySelectorAll(".search__list li")
        
        searchList

        //검색
        searchBox.addEventListener("keyup", () => {
            const userWord = searchBox.value; //사용자가 입력한 키워드

            searchList.forEach(el=> {
                // const cssName = el.getAnimations("data-name")
                const cssName = el.dataset.name;
                
                if(cssName.indexOf(userWord)){
                    //데이터가 있을 때
                    el.classList.add("hide")
                } else {
                    //데이터가 없을 때
                    el.classList.remove("hide")
                }
            })
        });
        const searchInfo= document.querySelector(".search__info span")
        
        searchInfo.innerHTML = searchList.length
    </script>
</body>
</html>

사용자의 정보를 받기 위해 input박스를 사용

                        <label for="search">검색하기</label>
                        <input type="text"  name="search" id="search" placeholder="CSS 속성을 입력해주세요!">

안에 저장한 데이터의 갯수를 찾기 위해  span의 선택자를 만들고  searchList안에 있는 데이터이기 때문에 

searchList에 length를 사용해 갯 수를 구했다.

        <div class="search__info">
          CSS속성 갯수 : <span></span>개
        </div>
                        
        const searchInfo= document.querySelector(".search__info span")
        
        searchInfo.innerHTML = searchList.length
searchBox.addEventListener("keyup", () => {
            const userWord = searchBox.value; //사용자가 입력한 키워드

            searchList.forEach(el=> {
                // const cssName = el.getAnimations("data-name")
                const cssName = el.dataset.name;
                
                if(cssName.indexOf(userWord)){
                    //데이터가 있을 때
                    el.classList.add("hide")
                } else {
                    //데이터가 없을 때
                    el.classList.remove("hide")
                }
            })
        });

오늘은 keyup을 사용해 보았습니다.

keyup은  이벤트는 사용자가 키보드에서 어떤 키를 눌렀다가 뗄 때 발생하는 이벤트입니다. 이벤트 리스너를 등록하여 사용자가 특정 키를 눌렀을 때 원하는 동작을 수행할 수 있습니다.

keyup으로 사용자가 정답을 고쳐 쓸때마다 바뀌는 효과를 준다.

사용자의 정답을 indexOf 를 통해 저장되어있는 정답과 비교해 시작점인 앞글자를 입력하면 indexOf 를 통해 0이 나와 0은 false이기에  else의 el.classList.remove가 적용되어 hide를 삭제한다. css에 hide를 display: none으로 설정해놨기 때문에 눈에 보이지 않다 remove가 적용되어 hide를 지워져 그 값들만 나타나게 된다.

 

indexOf

중요

문자열을 검색하여, 주어진 값과 일치하는 첫 번째 위치값(index)을 반환합니다.
문자열을 검색하여, 주어진 값과 일치하는 것이 없으면 -1을 반환합니다.
대소문자를 구별합니다.

 

리스트 총 갯수 구하기

총 몇개 있는지 출력한것을  span에 넣어주기 위해

선택자를

        const searchInfo= document.querySelector(".search__info span")

로 설정합니다.

searchInfo.innerHTML = searchList.length

리스트 수는 length로 알수있기에  선택자.innerHTML(출력) = searchList(리스트).length(수 구하기)로  

리스트가 총 몇개인지 출력하였다.