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 / .wrapAll()

jQuery / Reference / .wrapAll()

여러 요소를 하나의 부모로 모으는 방법과 중간 형제의 처리, 위치 이동 및 감싸기 해제의 한계를 설명합니다.

jQuery / Reference / .wrap()

jQuery / Reference / .wrap()

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

jQuery / Reference / .unwrap()

jQuery / Reference / .unwrap()

직접 부모를 조건부로 제거하면서 자식과 형제를 보존하는 방법, 스타일·이벤트·복원 시 주의점을 설명합니다.

jQuery / Reference / .insertAfter()

jQuery / Reference / .insertAfter()

넣을 요소를 먼저 지정해 대상 뒤에 형제로 삽입하는 문법과 after의 차이, 안전한 텍스트 삽입을 설명합니다.

jQuery / Reference / :contains()

jQuery / Reference / :contains()

텍스트의 부분 일치와 대소문자 구분을 예제로 확인하고, 자식 텍스트와 동적인 검색어를 처리하는 방법을 설명합니다.

jQuery / Reference / :button

jQuery / Reference / :button

input 버튼과 button 태그를 선택하는 :button의 범위를 예제로 확인하고, submit·reset 입력칸과의 차이를 설명합니다.

jQuery / Reference / .has()

jQuery / Reference / .has()

특정 자손을 가진 원래 요소를 골라내는 방법을 확인하고, find와 결과 대상이 어떻게 다른지 설명합니다.

jQuery / Reference / .append()

jQuery / Reference / .append()

내용을 마지막 자식으로 추가하는 문법과 실행 결과를 확인하고, 기존 요소의 이동·다중 대상 복제·입력값 처리 시 주의점을 설명합니다.

jQuery / Reference / .insertBefore()

jQuery / Reference / .insertBefore()

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

jQuery / Reference / .find()

jQuery / Reference / .find()

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