AD JB Toolbox 01

jQuery / Reference / :contains()

:contains("문자열")은 지정한 문자열을 텍스트에 포함한 요소를 선택합니다. 대소문자를 구분하고 자식 요소의 텍스트도 검사하므로, 정확히 일치하는 문단만 찾는 선택자와는 다릅니다.

문법과 적용 범위

$('p:contains("안내")');
$("#messages p").filter(':contains("jb")');

태그 사이에 보이는 텍스트가 검사 대상이며 input의 value나 이미지의 alt를 검색하는 기능은 아닙니다. 부분 문자열이 일치하면 선택되므로 jbdui도 jb 검색에 포함됩니다. 부모와 자식을 모두 대상으로 삼으면 같은 문자열을 가진 여러 단계의 요소가 선택될 수 있습니다. 이 선택자는 jQuery 확장이며 표준 CSS 선택자 API에서 사용할 수 없습니다.

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

전체 실행 예제

아래 코드를 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 contains-selector 예제</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="messages">
  <p id="a">일반 문단</p>
  <p id="b">jb 안내</p>
  <p id="c">JB 안내</p>
  <p id="d">문자열 jbdui</p>
  <p id="e"><span>jb</span> 포함 문단</p>
</div>
  <p id="output" aria-live="polite"></p>
  <script>
    $(function () {
      const $found = $("#messages p").filter(':contains("jb")');
      $found.addClass("marked");
      $("#output").text($found.map(function () { return this.id; }).get().join(", "));
    });
  </script>
</body>
</html>

실행 결과 확인

b, d, e가 강조되고 결과는 b, d, e입니다. c의 대문자 JB는 일치하지 않고, e는 span 안에 문자열이 있어도 선택됩니다.

동적인 검색어 비교

const query = "JB".toLocaleLowerCase();
const $found = $("#messages p").filter(function () {
  return $(this).text().toLocaleLowerCase().includes(query);
});

앞의 전체 예제에서 선택 코드 대신 쓰면 b, c, d, e가 선택됩니다. 따옴표를 포함한 검색어도 선택자 문법으로 해석되지 않고 텍스트로 비교됩니다.

사용할 때 주의할 점

  • 정확한 문자열 일치가 필요하면 .filter() 안에서 $(this).text().trim() === 검색어처럼 비교하세요. 표시 공백과 줄바꿈도 결과에 영향을 줍니다.
  • 검색창의 값을 선택자 문자열에 직접 붙이면 따옴표·괄호 때문에 선택자가 깨질 수 있습니다. 동적인 검색어는 함수 안에서 .text().includes()로 비교하는 편이 단순합니다.
  • 대소문자를 무시하려면 검색어와 대상 텍스트를 같은 방식으로 소문자화해 비교해야 합니다. 빈 검색어는 모든 문자열에 포함되므로 별도 처리를 정하세요.

용도를 비교하려면 .find()로 검색 범위 좁히기을 참고하세요.

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

jQuery / Reference / .slideUp()

내용을 접어 숨기는 문법과 시간·easing·완료 콜백을 설명하고, 연속 클릭과 처음 상태로 되돌리는 예제를 제공합니다.

jQuery / Reference / .after()

jQuery / Reference / .after()

대상의 뒤에 형제 요소를 추가하는 방법과 기존 요소 이동, append 및 insertAfter와의 차이를 설명합니다.

jQuery / Reference / .find()

jQuery / Reference / .find()

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

jQuery / Reference / .removeAttr()

jQuery / Reference / .removeAttr()

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

jQuery / Reference / .add()

jQuery / Reference / .add()

여러 선택 집합을 합쳐 사용하는 방법과 원래 변수의 보존 여부를 확인하고, 문서 삽입 및 addBack과의 차이를 설명합니다.

jQuery / Reference / .has()

jQuery / Reference / .has()

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

jQuery / Reference / .prepend()

jQuery / Reference / .prepend()

내용을 첫 번째 자식으로 추가하는 문법을 예제로 확인하고, 기존 요소 이동과 여러 대상에 삽입할 때의 동작을 설명합니다.

jQuery / Reference / .addBack()

jQuery / Reference / .addBack()

탐색 직전의 집합을 다시 합치는 방법과 선택자 필터의 적용 범위를 예제로 확인합니다.

jQuery / Reference / .slideDown()

jQuery / Reference / .slideDown()

숨겨진 내용을 펼치는 문법과 초기 표시 상태를 설명하고, 효과 큐·완료 콜백·동작 줄이기를 처리하는 예제를 제공합니다.

jQuery / Reference / .wrap()

jQuery / Reference / .wrap()

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