[jQuery] 09. show(), hide(), toggle() 사용법

[jQuery] 09. show(), hide(), toggle() 사용법

지난 글에서는 jQuery의 addClass(), removeClass(), toggleClass()를 사용해서 CSS 클래스를 제어하는 방법을 알아봤습니다.

이번 글에서는 HTML 요소를 화면에 보이게 하거나 숨길 때 사용하는 show(), hide(), toggle()에 대해 알아보겠습니다.

이 메서드들은 버튼을 눌렀을 때 설명 박스를 열고 닫거나, 안내 문구를 숨기거나, 메뉴를 펼치고 접는 기능을 만들 때 자주 사용됩니다.


1. show(), hide(), toggle()이란?

jQuery에서는 요소의 표시 상태를 간단하게 제어할 수 있습니다.

  • show() : 숨겨진 요소를 화면에 보여줍니다.
  • hide() : 보이는 요소를 화면에서 숨깁니다.
  • toggle() : 보이면 숨기고, 숨겨져 있으면 보여줍니다.

즉, show()와 hide()는 각각 보여주기와 숨기기이고, toggle()은 두 동작을 번갈아 실행하는 메서드입니다.


2. hide()로 요소 숨기기

hide()는 선택한 요소를 화면에서 숨길 때 사용합니다.

📌 기본 문법

$("선택자").hide();

📌 예제 코드

<p id="message">이 문장은 버튼을 누르면 사라집니다.</p>

<button id="hideBtn">숨기기</button>

<script>
  $("#hideBtn").click(function() {
    $("#message").hide();
  });
</script>

📌 실행 결과

  • 처음에는 문장이 화면에 표시됩니다.
  • 숨기기 버튼을 클릭합니다.
  • 문장이 화면에서 사라집니다.

3. show()로 요소 보이기

show()는 숨겨져 있는 요소를 다시 화면에 보여줄 때 사용합니다.

📌 기본 문법

$("선택자").show();

📌 예제 코드

<p id="message" style="display:none;">숨겨져 있던 문장입니다.</p>

<button id="showBtn">보이기</button>

<script>
  $("#showBtn").click(function() {
    $("#message").show();
  });
</script>

📌 실행 결과

  • 처음에는 문장이 보이지 않습니다.
  • 보이기 버튼을 클릭합니다.
  • 숨겨져 있던 문장이 화면에 나타납니다.

4. show()와 hide() 함께 사용하기

보이기 버튼과 숨기기 버튼을 따로 만들어서 요소의 표시 상태를 제어할 수 있습니다.

📌 예제 코드

<div id="box" style="width:220px; padding:20px; background:#eeeeee;">
  보였다가 숨겨지는 박스입니다.
</div>

<br>

<button id="showBtn">보이기</button>
<button id="hideBtn">숨기기</button>

<script>
  $("#showBtn").click(function() {
    $("#box").show();
  });

  $("#hideBtn").click(function() {
    $("#box").hide();
  });
</script>

📌 실행 결과

  • 숨기기 버튼을 클릭하면 박스가 사라집니다.
  • 보이기 버튼을 클릭하면 박스가 다시 나타납니다.

5. toggle()이란?

toggle()은 요소가 보이면 숨기고, 숨겨져 있으면 다시 보여주는 메서드입니다.

show()와 hide()를 버튼 하나로 처리하고 싶을 때 사용하면 편리합니다.

📌 기본 문법

$("선택자").toggle();

6. toggle() 기본 예제

버튼을 클릭할 때마다 문장이 보였다가 사라지는 예제를 만들어보겠습니다.

📌 예제 코드

<p id="message">버튼을 누를 때마다 보이거나 숨겨집니다.</p>

<button id="toggleBtn">열기 / 닫기</button>

<script>
  $("#toggleBtn").click(function() {
    $("#message").toggle();
  });
</script>

📌 실행 결과

  • 처음에는 문장이 화면에 보입니다.
  • 버튼을 한 번 클릭하면 문장이 사라집니다.
  • 버튼을 다시 클릭하면 문장이 다시 나타납니다.

7. 속도를 넣어 부드럽게 처리하기

show(), hide(), toggle()에는 속도를 넣을 수 있습니다.

숫자를 넣으면 해당 시간 동안 천천히 동작합니다. 단위는 밀리초입니다.

📌 예제 코드

<div id="box" style="width:220px; padding:20px; background:skyblue;">
  천천히 사라지는 박스입니다.
</div>

<br>

<button id="toggleBtn">토글</button>

<script>
  $("#toggleBtn").click(function() {
    $("#box").toggle(500);
  });
</script>

📌 실행 결과

  • 버튼을 클릭하면 박스가 0.5초 동안 천천히 사라집니다.
  • 다시 클릭하면 0.5초 동안 천천히 나타납니다.

참고로 1000은 1초, 500은 0.5초를 의미합니다.


8. slow, fast 사용하기

숫자 대신 "slow", "fast" 같은 문자열을 사용할 수도 있습니다.

📌 예제 코드

$("#box").hide("slow");
$("#box").show("fast");
$("#box").toggle("slow");

정확한 속도를 조절하고 싶다면 숫자를 사용하는 것이 더 명확합니다.


9. 안내 문구 열고 닫기 예제

toggle()은 안내 문구나 설명 박스를 열고 닫는 기능에 자주 사용됩니다.

📌 예제 코드

<button id="infoBtn">설명 보기</button>

<div id="infoBox" style="display:none; margin-top:10px; padding:15px; background:#f7f7f7; border:1px solid #dddddd;">
  이 영역은 버튼을 클릭하면 열리고 다시 클릭하면 닫힙니다.
</div>

<script>
  $("#infoBtn").click(function() {
    $("#infoBox").toggle(300);
  });
</script>

📌 실행 결과

  • 처음에는 설명 박스가 보이지 않습니다.
  • 설명 보기 버튼을 클릭하면 설명 박스가 나타납니다.
  • 버튼을 다시 클릭하면 설명 박스가 사라집니다.

10. 버튼 글자도 함께 바꾸기

toggle()을 사용할 때 버튼 문구도 함께 바꾸면 사용자가 현재 상태를 더 쉽게 이해할 수 있습니다.

이때는 is(":visible")을 사용해서 요소가 현재 보이는 상태인지 확인할 수 있습니다.

📌 예제 코드

<button id="infoBtn">설명 보기</button>

<div id="infoBox" style="display:none; margin-top:10px; padding:15px; background:#eeeeee;">
  jQuery toggle()로 열고 닫는 설명 박스입니다.
</div>

<script>
  $("#infoBtn").click(function() {
    $("#infoBox").toggle(300);

    if ($("#infoBox").is(":visible")) {
      $("#infoBtn").text("설명 닫기");
    } else {
      $("#infoBtn").text("설명 보기");
    }
  });
</script>

다만 toggle(300)은 애니메이션이 진행되는 동안 상태 판단이 헷갈릴 수 있습니다. 그래서 정확하게 처리하려면 toggle이 끝난 뒤 실행되는 callback을 사용할 수 있습니다.

📌 callback 사용 예

$("#infoBox").toggle(300, function() {
  if ($("#infoBox").is(":visible")) {
    $("#infoBtn").text("설명 닫기");
  } else {
    $("#infoBtn").text("설명 보기");
  }
});

11. 여러 박스 중 클릭한 것만 열기

여러 개의 버튼과 박스가 있을 때 클릭한 버튼과 관련된 박스만 열고 닫고 싶다면 구조를 잘 잡아야 합니다.

간단한 예제로 버튼 바로 다음에 있는 박스를 열고 닫아보겠습니다.

📌 예제 코드

<button class="question">질문 1</button>
<div class="answer" style="display:none; padding:10px; background:#eeeeee;">
  질문 1의 답변입니다.
</div>

<button class="question">질문 2</button>
<div class="answer" style="display:none; padding:10px; background:#eeeeee;">
  질문 2의 답변입니다.
</div>

<script>
  $(".question").click(function() {
    $(this).next(".answer").toggle(300);
  });
</script>

📌 실행 결과

  • 질문 1을 클릭하면 질문 1의 답변만 열립니다.
  • 질문 2를 클릭하면 질문 2의 답변만 열립니다.
  • 클릭한 버튼 바로 다음에 있는 answer만 제어됩니다.

12. 전체 예제

이번에는 show(), hide(), toggle()을 모두 사용한 전체 예제를 만들어보겠습니다.

📌 예제 코드

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>jQuery show hide toggle</title>
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

  <style>
    #box {
      width: 260px;
      padding: 20px;
      background: royalblue;
      color: white;
      border-radius: 8px;
      margin-bottom: 10px;
    }
  </style>
</head>
<body>

  <h2>jQuery show(), hide(), toggle() 공부</h2>

  <div id="box">
    버튼으로 보이거나 숨겨지는 박스입니다.
  </div>

  <button id="showBtn">보이기</button>
  <button id="hideBtn">숨기기</button>
  <button id="toggleBtn">열기 / 닫기</button>

  <script>
    $(function() {
      $("#showBtn").click(function() {
        $("#box").show(300);
      });

      $("#hideBtn").click(function() {
        $("#box").hide(300);
      });

      $("#toggleBtn").click(function() {
        $("#box").toggle(300);
      });
    });
  </script>

</body>
</html>

📌 실행 결과

  • 보이기 버튼을 클릭하면 박스가 나타납니다.
  • 숨기기 버튼을 클릭하면 박스가 사라집니다.
  • 열기 / 닫기 버튼을 클릭하면 박스가 보였다가 숨겨집니다.
  • 300ms 속도로 부드럽게 동작합니다.

13. 자주 하는 실수

📌 1. 처음부터 숨겨야 하는 요소에 display:none을 안 쓰는 경우

처음에는 안 보이다가 버튼을 눌렀을 때 나타나게 하려면 HTML 요소에 display:none을 적용해야 합니다.

<div id="box" style="display:none;">
  처음에는 숨겨진 박스입니다.
</div>

📌 2. toggle()과 toggleClass()를 헷갈리는 경우

toggle()은 요소를 보이거나 숨기는 메서드입니다.

toggleClass()는 클래스를 추가하거나 제거하는 메서드입니다.

// 표시 상태 변경
$("#box").toggle();

// 클래스 변경
$("#box").toggleClass("active");

📌 3. 여러 요소가 모두 같이 열리는 경우

같은 class를 가진 요소를 선택하면 여러 요소가 한 번에 바뀔 수 있습니다.

// 모든 .answer가 열릴 수 있음
$(".answer").toggle();

현재 클릭한 요소와 연결된 것만 바꾸고 싶다면 $(this), next(), parent(), find() 등을 함께 사용합니다.

$(this).next(".answer").toggle();

📌 4. jQuery 연결을 빼먹는 경우

show(), hide(), toggle()도 jQuery 메서드이므로 jQuery 라이브러리를 먼저 연결해야 합니다.

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

14. 핵심 정리

  • show()는 숨겨진 요소를 화면에 보여줍니다.
  • hide()는 보이는 요소를 화면에서 숨깁니다.
  • toggle()은 보이면 숨기고, 숨겨져 있으면 보여줍니다.
  • show(500), hide(500), toggle(500)처럼 속도를 지정할 수 있습니다.
  • 처음부터 숨길 요소는 display:none을 적용하면 됩니다.
  • toggle()은 표시 상태를 바꾸고, toggleClass()는 클래스를 바꿉니다.
  • 여러 요소 중 하나만 제어할 때는 $(this)와 next() 같은 탐색 메서드를 함께 사용합니다.

이번 글에서는 jQuery의 show(), hide(), toggle() 사용법에 대해 알아봤습니다.

이 메서드들은 설명 박스, FAQ, 메뉴 열기/닫기처럼 화면 요소를 간단하게 제어할 때 유용합니다.

다음 글에서는 [jQuery] 10. fadeIn(), fadeOut(), fadeToggle() 사용법에 대해 알아보겠습니다.