AD JB Toolbox 01

jQuery / Reference / .find()

.find()는 현재 선택한 요소의 자손 중 조건에 맞는 요소를 찾습니다. 여러 단계 아래까지 탐색하지만 현재 요소 자신은 결과에 포함하지 않습니다.

문법과 적용 범위

$("#panel").find(".item");
$("#panel").find("*");

문서 트리에서 자손은 자식과 그 아래 모든 단계의 요소를 뜻합니다. .find()에는 선택자, DOM 요소 또는 jQuery 객체를 전달할 수 있고, 문자열 선택자로 쓰려면 인수가 필요합니다. 바로 한 단계 아래의 자식만 찾으려면 .children()을, 현재 집합 자체를 골라내려면 .filter()를 사용합니다. $("#panel .item") 같은 자손 선택자와 같은 범위를 만들 수도 있습니다.

jQuery 공식 문서의 .find() 정의와 인수에서 다른 호출 형태도 확인할 수 있습니다.

전체 실행 예제

아래 코드를 UTF-8 형식의 example.html 파일로 저장한 뒤 브라우저로 여세요. 예제는 jQuery 4.0.0 일반 빌드를 외부 주소에서 불러오므로 인터넷 연결이 필요합니다. 문서가 준비된 뒤 실행하도록 $(function () { ... }) 안에 코드를 작성했습니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery find 예제</title>
  <style>
    body { margin: 24px; font-family: sans-serif; line-height: 1.6; }
    .marked { background: #fff0b3; border: 2px solid #835b00; }
    .active { color: #a00000; font-weight: bold; }
    button, input, select { font: inherit; }
    #output { white-space: pre-wrap; overflow-wrap: anywhere; }
  </style>
  <script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
</head>
<body>
<div id="panel" class="item">
  <p class="item" id="a">직접 자식</p>
  <div><p class="item" id="b">중첩 자손</p></div>
</div>
<p class="item" id="c">패널 밖</p>
  <p id="output" aria-live="polite"></p>
  <script>
    $(function () {
      const $items = $("#panel").find(".item");
      $items.addClass("marked");
      $("#output").text($items.map(function () { return this.id; }).get().join(", "));
    });
  </script>
</body>
</html>

실행 결과 확인

a와 b만 강조되고 결과는 a, b입니다. panel 자신과 패널 밖의 c는 선택되지 않습니다. .find("*")로 바꾸면 패널 안의 div도 함께 선택됩니다.

사용할 때 주의할 점

  • 부모의 클래스가 선택 조건과 같아도 .find()는 부모를 포함하지 않습니다. 부모까지 함께 처리하려면 .addBack()이나 별도 집합을 합치는 방식을 검토하세요.
  • 아직 DOM에 만들어지지 않은 자식은 찾을 수 없습니다. 동적으로 내용을 추가한 후 다시 조회하거나 이벤트 위임을 사용해야 합니다.
  • 선택자가 맞는데 결과가 비었다면 먼저 부모의 .length를 확인하세요. 잘못된 부모 선택과 자식 조건 불일치를 나누어 확인할 수 있습니다.

용도를 비교하려면 .has()로 자손을 가진 부모 선택하기, .addBack()으로 부모도 포함하기을 참고하세요.

같은 카테고리의 다른 글
jQuery / Reference / .width()

jQuery / Reference / .width()

내용 너비와 padding·border를 포함한 너비를 비교하고, border-box에서 width를 읽고 설정하는 결과를 설명합니다.

jQuery / Reference / .css()

jQuery / Reference / .css()

계산된 스타일 읽기와 인라인 스타일 설정·해제 방법을 확인하고, 단위 및 jQuery 4.0의 숫자 처리 차이를 설명합니다.

jQuery / Reference / .addClass()

jQuery / Reference / .addClass()

기존 클래스를 유지하며 한 개 또는 여러 클래스를 추가하는 방법과 CSS가 적용되지 않을 때의 확인 사항을 설명합니다.

jQuery / Reference / .remove()

jQuery / Reference / .remove()

선택 요소와 자손을 제거하는 방법, 조건 선택자의 범위 및 empty·detach와의 차이를 설명합니다.

jQuery / Reference / .find()

jQuery / Reference / .find()

현재 요소를 제외한 자손 탐색 범위를 확인하고, children·filter·has와 용도 차이를 설명합니다.

jQuery / Reference / .insertBefore()

jQuery / Reference / .insertBefore()

넣을 요소를 먼저 지정해 대상 앞에 형제로 삽입하는 문법과 before의 차이, 이동·복제 동작을 설명합니다.

jQuery / Reference / .removeClass()

jQuery / Reference / .removeClass()

일부 클래스와 모든 클래스의 제거 차이를 확인하고, 남은 스타일 및 인라인 스타일의 처리 범위를 설명합니다.

jQuery / Reference / .slideToggle()

jQuery / Reference / .slideToggle()

내용의 접기·펼치기를 전환하는 예제와 버튼 상태 연결, 효과 큐 및 전체 완료 처리 방법을 설명합니다.

jQuery / Reference / .wrap()

jQuery / Reference / .wrap()

각 요소에 별도의 부모 구조를 만드는 방법과 반환 대상, 반복 실행 및 wrapAll과의 차이를 설명합니다.

jQuery / Reference / .removeAttr()

jQuery / Reference / .removeAttr()

HTML 속성 삭제와 빈 문자열 설정의 차이, 입력값 보존, 불리언·ARIA 속성의 주의점을 예제로 설명합니다.