[jQuery] 15. parent(), children(), find() 사용법

[jQuery] 15. parent(), children(), find() 사용법

지난 글에서는 jQuery의 remove(), empty()를 사용해서 HTML 요소를 삭제하거나 내부 내용을 비우는 방법을 알아봤습니다.

이번 글에서는 선택한 요소를 기준으로 부모 요소, 자식 요소, 하위 요소를 찾을 때 사용하는 parent(), children(), find()에 대해 알아보겠습니다.

이 메서드들은 HTML 구조 안에서 원하는 요소를 정확하게 찾을 때 자주 사용됩니다. 특히 버튼을 클릭했을 때 그 버튼이 들어 있는 카드, 목록, 박스 안의 특정 요소만 바꾸고 싶을 때 유용합니다.


1. parent(), children(), find()란?

HTML은 부모와 자식 구조로 이루어져 있습니다.

예를 들어 div 안에 p 태그와 button 태그가 있다면 div는 부모 요소이고, p와 button은 자식 요소입니다.

  • parent() : 선택한 요소의 바로 위 부모 요소를 찾습니다.
  • children() : 선택한 요소의 바로 아래 자식 요소를 찾습니다.
  • find() : 선택한 요소 안쪽에 있는 모든 하위 요소 중 원하는 요소를 찾습니다.
$(this).parent();
$("#box").children();
$("#box").find(".text");

2. HTML 부모와 자식 구조 이해하기

먼저 HTML 구조를 간단하게 살펴보겠습니다.

📌 HTML 구조

<div class="card">
  <h3>카드 제목</h3>
  <p>카드 내용</p>
  <button>버튼</button>
</div>

위 코드에서 div.card는 h3, p, button을 감싸고 있습니다.

  • div.card는 부모 요소입니다.
  • h3, p, button은 div.card의 자식 요소입니다.
  • button에서 parent()를 사용하면 div.card를 찾을 수 있습니다.
  • div.card에서 children()을 사용하면 h3, p, button을 찾을 수 있습니다.

3. parent() 기본 사용법

parent()는 선택한 요소의 바로 위 부모 요소를 찾을 때 사용합니다.

📌 기본 문법

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

📌 예제 코드

<div class="box" style="padding:20px; background:#eeeeee;">
  <button id="btn">부모 색상 변경</button>
</div>

<script>
  $("#btn").click(function() {
    $(this).parent().css("background", "skyblue");
  });
</script>

📌 실행 결과

  • 버튼을 클릭합니다.
  • 버튼의 부모 요소인 div.box가 선택됩니다.
  • 부모 박스의 배경색이 하늘색으로 변경됩니다.

4. parent()로 카드 전체 삭제하기

삭제 버튼을 눌렀을 때 버튼만 삭제되는 것이 아니라 카드 전체를 삭제하고 싶을 수 있습니다.

이럴 때 버튼을 기준으로 부모 요소를 찾아 remove()를 사용할 수 있습니다.

📌 예제 코드

<div class="card" style="padding:15px; background:#eeeeee; margin-bottom:10px;">
  <p>삭제할 카드입니다.</p>
  <button class="deleteBtn">삭제</button>
</div>

<script>
  $(".deleteBtn").click(function() {
    $(this).parent(".card").remove();
  });
</script>

📌 실행 결과

  • 삭제 버튼을 클릭합니다.
  • 버튼의 부모 요소인 .card가 선택됩니다.
  • 카드 전체가 화면에서 삭제됩니다.

5. children() 기본 사용법

children()은 선택한 요소의 바로 아래 자식 요소를 찾을 때 사용합니다.

📌 기본 문법

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

📌 예제 코드

<div id="box" style="padding:20px; background:#eeeeee;">
  <p>첫 번째 문장</p>
  <p>두 번째 문장</p>
  <span>작은 글자</span>
</div>

<button id="btn">자식 요소 변경</button>

<script>
  $("#btn").click(function() {
    $("#box").children().css("color", "blue");
  });
</script>

📌 실행 결과

  • 버튼을 클릭합니다.
  • id가 box인 div의 바로 아래 자식 요소들이 선택됩니다.
  • p 태그와 span 태그의 글자 색이 파란색으로 변경됩니다.

6. children()으로 특정 자식만 찾기

children() 안에 선택자를 넣으면 바로 아래 자식 중에서 원하는 요소만 찾을 수 있습니다.

📌 예제 코드

<div id="box">
  <p>첫 번째 p 태그</p>
  <p>두 번째 p 태그</p>
  <span>span 태그</span>
</div>

<button id="btn">p 태그만 변경</button>

<script>
  $("#btn").click(function() {
    $("#box").children("p").css("font-weight", "bold");
  });
</script>

📌 실행 결과

  • 버튼을 클릭하면 box의 자식 중 p 태그만 선택됩니다.
  • p 태그 글자만 굵게 변경됩니다.
  • span 태그는 변경되지 않습니다.

7. find() 기본 사용법

find()는 선택한 요소 안쪽에서 원하는 하위 요소를 찾을 때 사용합니다.

children()이 바로 아래 자식만 찾는다면, find()는 더 깊이 들어간 하위 요소까지 찾을 수 있습니다.

📌 기본 문법

$("선택자").find("찾을 선택자");

📌 예제 코드

<div id="box">
  <div class="inner">
    <p class="text">안쪽 문장입니다.</p>
  </div>
</div>

<button id="btn">하위 요소 찾기</button>

<script>
  $("#btn").click(function() {
    $("#box").find(".text").css("color", "red");
  });
</script>

📌 실행 결과

  • 버튼을 클릭합니다.
  • box 안쪽에 있는 class가 text인 요소를 찾습니다.
  • 안쪽 문장의 글자 색이 빨간색으로 변경됩니다.

8. children()과 find()의 차이

children()과 find()는 둘 다 안쪽 요소를 찾지만 범위가 다릅니다.

메서드 찾는 범위 특징
children() 바로 아래 자식 요소 한 단계 아래만 찾음
find() 모든 하위 요소 안쪽 깊은 요소까지 찾음

📌 비교 코드

<div id="box">
  <p class="text">바로 아래 문장</p>

  <div>
    <p class="text">안쪽 문장</p>
  </div>
</div>

<script>
  $("#box").children(".text"); // 바로 아래 p만 찾음
  $("#box").find(".text");     // 안쪽 p까지 모두 찾음
</script>

9. 클릭한 카드 안의 제목만 변경하기

여러 카드가 있을 때 버튼을 누른 카드 안의 제목만 변경하고 싶을 수 있습니다.

이럴 때는 $(this), parent(), find()를 함께 사용할 수 있습니다.

📌 예제 코드

<div class="card" style="padding:15px; background:#eeeeee; margin-bottom:10px;">
  <h3 class="title">첫 번째 카드</h3>
  <p>카드 내용입니다.</p>
  <button class="changeBtn">제목 변경</button>
</div>

<div class="card" style="padding:15px; background:#eeeeee; margin-bottom:10px;">
  <h3 class="title">두 번째 카드</h3>
  <p>카드 내용입니다.</p>
  <button class="changeBtn">제목 변경</button>
</div>

<script>
  $(".changeBtn").click(function() {
    $(this).parent(".card").find(".title").text("선택한 카드입니다.");
  });
</script>

📌 실행 결과

  • 첫 번째 카드의 버튼을 클릭하면 첫 번째 카드 제목만 변경됩니다.
  • 두 번째 카드의 버튼을 클릭하면 두 번째 카드 제목만 변경됩니다.
  • 다른 카드의 제목은 함께 변경되지 않습니다.

10. 클릭한 카드 안의 내용만 숨기기

find()를 사용하면 클릭한 카드 안쪽의 특정 요소만 찾아서 숨길 수 있습니다.

📌 예제 코드

<div class="card" style="padding:15px; background:#eeeeee; margin-bottom:10px;">
  <h3>공지 1</h3>
  <p class="content">공지 내용 1입니다.</p>
  <button class="hideBtn">내용 숨기기</button>
</div>

<div class="card" style="padding:15px; background:#eeeeee; margin-bottom:10px;">
  <h3>공지 2</h3>
  <p class="content">공지 내용 2입니다.</p>
  <button class="hideBtn">내용 숨기기</button>
</div>

<script>
  $(".hideBtn").click(function() {
    $(this).parent(".card").find(".content").hide();
  });
</script>

📌 실행 결과

  • 공지 1 버튼을 클릭하면 공지 1 내용만 숨겨집니다.
  • 공지 2 버튼을 클릭하면 공지 2 내용만 숨겨집니다.
  • 클릭한 카드 내부에서만 요소를 찾기 때문에 다른 카드에 영향을 주지 않습니다.

11. closest()도 함께 알아두기

parent()는 바로 위 부모만 찾습니다.

하지만 HTML 구조가 깊어지면 바로 위 부모가 원하는 요소가 아닐 수 있습니다. 이럴 때는 closest()를 사용할 수 있습니다.

  • parent() : 바로 위 부모 요소를 찾습니다.
  • closest() : 현재 요소에서 가장 가까운 조건에 맞는 부모 요소를 찾습니다.

📌 예제 코드

<div class="card">
  <div class="card-body">
    <button class="deleteBtn">삭제</button>
  </div>
</div>

<script>
  $(".deleteBtn").click(function() {
    $(this).closest(".card").remove();
  });
</script>

위 코드에서는 버튼 바로 위 부모가 card-body입니다. 하지만 closest(".card")를 사용하면 가장 가까운 .card 요소를 찾아 삭제할 수 있습니다.


12. children()으로 메뉴 항목 스타일 변경하기

children()을 사용하면 특정 메뉴 영역 안의 바로 아래 항목만 제어할 수 있습니다.

📌 예제 코드

<ul id="menu">
  <li>홈</li>
  <li>게시판</li>
  <li>마이페이지</li>
</ul>

<button id="styleBtn">메뉴 강조</button>

<script>
  $("#styleBtn").click(function() {
    $("#menu").children("li").css({
      "background": "#eeeeee",
      "padding": "10px",
      "margin-bottom": "5px"
    });
  });
</script>

📌 실행 결과

  • 버튼을 클릭하면 menu의 바로 아래 li 요소들이 선택됩니다.
  • 각 메뉴 항목에 배경색과 여백이 적용됩니다.

13. 전체 예제

이번에는 카드 목록에서 클릭한 카드 안의 제목과 내용만 변경하고, 삭제까지 할 수 있는 예제를 만들어보겠습니다.

📌 예제 코드

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

  <style>
    .card {
      padding: 15px;
      margin-bottom: 10px;
      background: #eeeeee;
      border-radius: 8px;
    }

    .active {
      background: royalblue;
      color: white;
    }
  </style>
</head>
<body>

  <h2>jQuery parent(), children(), find() 공부</h2>

  <div class="card">
    <h3 class="title">첫 번째 카드</h3>
    <p class="content">첫 번째 카드 내용입니다.</p>
    <button class="changeBtn">변경</button>
    <button class="deleteBtn">삭제</button>
  </div>

  <div class="card">
    <h3 class="title">두 번째 카드</h3>
    <p class="content">두 번째 카드 내용입니다.</p>
    <button class="changeBtn">변경</button>
    <button class="deleteBtn">삭제</button>
  </div>

  <script>
    $(function() {
      $(".changeBtn").click(function() {
        var card = $(this).parent(".card");

        card.addClass("active");
        card.find(".title").text("선택된 카드");
        card.find(".content").text("이 카드의 내용만 변경되었습니다.");
      });

      $(".deleteBtn").click(function() {
        $(this).parent(".card").remove();
      });
    });
  </script>

</body>
</html>

📌 실행 결과

  • 첫 번째 카드의 변경 버튼을 클릭하면 첫 번째 카드만 변경됩니다.
  • 두 번째 카드의 변경 버튼을 클릭하면 두 번째 카드만 변경됩니다.
  • 삭제 버튼을 클릭하면 해당 버튼이 들어 있는 카드만 삭제됩니다.
  • parent()로 기준 카드를 찾고, find()로 카드 내부 요소를 찾습니다.

14. 자주 하는 실수

📌 1. parent()가 모든 부모를 찾는다고 생각하는 경우

parent()는 바로 위 부모 요소만 찾습니다.

$(this).parent();

더 위쪽의 특정 부모를 찾고 싶다면 closest()를 사용하는 것이 좋습니다.

$(this).closest(".card");

📌 2. children()으로 깊은 하위 요소를 찾으려는 경우

children()은 바로 아래 자식만 찾습니다. 안쪽 깊은 요소까지 찾으려면 find()를 사용합니다.

// 바로 아래 자식만 찾음
$("#box").children(".text");

// 안쪽 모든 하위 요소에서 찾음
$("#box").find(".text");

📌 3. 모든 카드의 제목이 한 번에 바뀌는 경우

전체 선택자를 바로 사용하면 모든 요소가 한꺼번에 변경될 수 있습니다.

// 모든 카드 제목이 바뀔 수 있음
$(".title").text("변경됨");

클릭한 카드 안의 제목만 바꾸려면 기준이 되는 부모를 먼저 찾고, 그 안에서 find()를 사용합니다.

$(this).parent(".card").find(".title").text("변경됨");

📌 4. 버튼만 삭제되는 경우

삭제 버튼에 바로 remove()를 사용하면 버튼만 삭제됩니다.

// 버튼만 삭제됨
$(this).remove();

// 버튼이 들어 있는 카드 삭제
$(this).parent(".card").remove();

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

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

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

15. 핵심 정리

  • parent()는 선택한 요소의 바로 위 부모 요소를 찾습니다.
  • children()은 선택한 요소의 바로 아래 자식 요소를 찾습니다.
  • find()는 선택한 요소 안쪽의 모든 하위 요소 중 원하는 요소를 찾습니다.
  • children()은 한 단계 아래만 찾고, find()는 더 깊은 요소까지 찾을 수 있습니다.
  • 클릭한 버튼이 들어 있는 카드만 제어하려면 $(this).parent()를 사용할 수 있습니다.
  • 클릭한 카드 안의 특정 요소만 바꾸려면 parent()와 find()를 함께 사용할 수 있습니다.
  • 구조가 깊을 때 원하는 부모를 찾으려면 closest()도 함께 알아두면 좋습니다.
  • 전체 선택자를 바로 쓰면 모든 요소가 바뀔 수 있으므로 기준 요소를 먼저 잡는 것이 중요합니다.

이번 글에서는 jQuery의 parent(), children(), find() 사용법에 대해 알아봤습니다.

이 메서드들은 HTML 구조 안에서 원하는 요소를 정확하게 찾기 위해 꼭 필요한 기능입니다. 특히 여러 개의 카드, 목록, 버튼이 있는 화면에서 클릭한 영역만 제어할 때 매우 유용합니다.

다음 글에서는 [jQuery] 16. siblings(), next(), prev() 사용법에 대해 알아보겠습

니다.