Programming/JavaScript

[JavaScript기초] 6. classList 다루기 (서브메뉴 숨기기)

midnightcoder 2023. 2. 6. 07:19

이전 포스팅에서 bootstrap을 이용하여, Navbar구현하는 법에 대해서 알아보았다.

https://midnightcoding.tistory.com/100

 

[JavaScript기초] 5. 부트스트랩 사용하는법(bootstrap)

부트스트랩은, 기존에 만들어 놓은 Navbar, tabs, Modal등을 가져와서 구현을 할 수 있는 플랫폼이다. 사용법 1. 구글에 bootstrap을 검색하여, 아래 링크로 들어간다. 2. Bootstrap 웹페이지로 들어가서 상

midnightcoding.tistory.com

 

이번 포스팅에서는 Bootstrap을 이용하여, Navbar 버튼을 눌러서 서브메뉴를 보여줄수 있도록 해보자

 

여기에서는 div tag에 class를 탈부착하여, 요소가 보이게 또는 안보이게 만들예정

01
오른쪽 버튼을 누르면 서브메뉴가 나타나고, 사라지고 한다.

1. UI 구현 (Navbar + sub menu via bootstrap)

 

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <link href="main.css" rel="stylesheet">
    <title>Hello, world!</title>
  </head>
  <body>
    <nav class="navbar navbar-light bg-light">
        <div class="container-fluid">
          <span class="navbar-brand">Navbar</span>
          <button class="navbar-toggler" type="button">
            <span class="navbar-toggler-icon"></span>
          </button>
        </div>
      </nav>

      <ul class="list-group">
        <li class="list-group-item">An item</li>
        <li class="list-group-item">A second item</li>
        <li class="list-group-item">A third item</li>
        <li class="list-group-item">A fourth item</li>
        <li class="list-group-item">And a fifth one</li>
      </ul>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

  </body>
</html>

그리고, css파일 (main.css)에 아래와 같이 두 class에 대해서 스타일링 해준다.

.list-group {
	/* 서브메뉴 숨기기위해 none */
    display: none; 
}

.show {
	/* show class가 있다면, 화면에 나타나도록 */
    display: block; 
}

 

2. 기능 구현 

class="show"를 추가하는 코드

<body> tag안에 <script> tag를 넣어주고, 아래 코드를 집어 넣는다.

 

document.getElementsByClassName('navbar-toggler')[0].addEventListener('click', function(){
  document.getElementsByClassName('list-group')[0].classList.add('show');
});

즉,  class="navbar-toggler" 를 가진 요소를 클릭하게되면,

class="list-group" 인 요소에 show라는 클래스명을 추가하라는 코드이다.

 

class="show"를 제거하는 코드

그렇다면, 다시 해당 서브메뉴를 안보이게 하고 싶다면?

위에서 부착했던, 'show' 클래스를 다시 제거하면 된다.

 

document.querySelector('.navbar-toggler').addEventListener('click', function(){
    document.querySelector('.list-group').classList.remove('show');
})

add를 remove함수로 바꿔주면되는데, toggle() 함수를 사용하게되면 위에 추가하고 제거하는 것을 모두 가능하다.

 

- 클래스명이 있으면 제거하고

- 클래스명이 없으면 붙여준다.

 

add(), remove() 대신 toggle() 을 이용한 코드

document.getElementsByClassName('navbar-toggler')[0].addEventListener('click', function(){
  document.getElementsByClassName('list-group')[0].classList.toggle('show');
});

 

querySelector

getElementById()

getElementsByClassName()

이전 포스팅에서 html 요소를 찾아주는 두가지 셀렉터에대해서 다뤄봤는데, 다른 셀렉터도 있습니다.

querySelector인데 아래와 같이 사용가능하다.

<div class="test1">안녕하세요</div>
<div id="test2">안녕하세요</div>

<script>
  document.querySelector('.test1').innerHTML = '안녕';
  document.querySelector('#test2').innerHTML = '안녕';
</script>

 

querySelector() 안에는 css 셀렉터 문법을 사용가능합니다.

(css에서 마침표는 class라는 뜻이고 #은 id라는 뜻임)

다만 querySelector() 는 맨 위의 한개 요소만 선택해줍니다.

 

<div class="test1">안녕하세요</div>
<div class="test1">안녕하세요</div>

<script>
  document.querySelectorAll('.test1')[1].innerHTML = '안녕';
</script>

▲ 그래서 위처럼 test1이라는 클래스가 중복으로 여러개 있는데

X번째 요소를 선택하고 싶은 경우엔 querySelectorAll() 쓰면 됩니다.

 

querySelectorAll() 은 해당하는걸 다 찾아서 [ ] 안에 담아줍니다.

그래서 [숫자] 를 뒤에 붙여서 원하는 위치에 있는 요소 찾아쓰면 됩니다.

 

출처 : 코딩애플 'JavaScript 입문과 웹 UI개발'