AD JB Toolbox 01

jQuery / Reference / .unwrap()

.unwrap()은 선택한 요소의 바로 위 부모를 제거하고, 그 부모의 자식들을 한 단계 위로 올립니다. 선택한 요소 자신과 형제들은 남으며, 부모 안의 다른 내용도 함께 보존됩니다.

문법과 적용 범위

$(".item").unwrap();
$(".item").unwrap(".group");

인수 없이 쓰면 제거 가능한 직접 부모를 대상으로 하고, 선택자를 주면 부모가 그 조건에 맞을 때만 제거합니다. 부모의 모든 조상을 한꺼번에 지우는 기능은 아닙니다. body는 제거하지 않으며, 반환값은 원래 선택 집합입니다. 지정한 자식 하나만 밖으로 꺼내는 이동 작업과도 구분해야 합니다.

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

전체 실행 예제

아래 코드를 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 unwrap 예제</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="container">
  <div class="group marked">
    <p class="item">선택한 문단</p>
    <p class="other">같은 부모의 다른 문단</p>
  </div>
</div>
<button id="unwrap" type="button">부모 제거</button>
  <p id="output" aria-live="polite"></p>
  <script>
    $(function () {
      $("#unwrap").on("click", function () {
        $(".item").unwrap(".group");
        $("#output").text("group 수: " + $(".group").length +
          " / container의 문단 수: " + $("#container > p").length);
      });
    });
  </script>
</body>
</html>

실행 결과 확인

버튼을 누르면 group의 테두리가 없어지고 두 문단이 container의 직접 자식으로 남습니다. 결과는 group 수: 0 / container의 문단 수: 2입니다. 다시 눌러도 container는 .group 조건에 맞지 않아 제거되지 않습니다.

사용할 때 주의할 점

  • 부모의 클래스나 id를 쓰는 CSS는 부모 제거 후 적용되지 않을 수 있습니다. DOM 구조뿐 아니라 화면 모양도 함께 확인하세요.
  • 부모에 직접 등록했던 jQuery 이벤트·데이터는 부모와 함께 없어집니다. 자식이 남는다고 부모의 동작까지 유지되는 것은 아닙니다.
  • 여러 자식이 같은 부모를 가리키면 그 부모는 한 번 제거됩니다. 더 높은 조상까지 제거하려는 의도가 없다면 조건 선택자를 사용하세요.

용도를 비교하려면 .wrap()으로 각 요소 감싸기, .wrapAll()의 이동 주의점을 참고하세요.

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

jQuery / Reference / .addBack()

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

jQuery / Reference / :contains()

jQuery / Reference / :contains()

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

jQuery / Reference / .toggleClass()

jQuery / Reference / .toggleClass()

클래스 반전과 불리언 조건으로 상태 지정하기를 구분하고, 버튼 상태 및 jQuery 4.0에서 사용할 문법을 설명합니다.

jQuery / Reference / .empty()

jQuery / Reference / .empty()

컨테이너를 남기고 내부 요소와 텍스트를 비우는 방법과 다시 채우기, 이벤트·입력값의 처리 범위를 설명합니다.

jQuery / Reference / .wrapAll()

jQuery / Reference / .wrapAll()

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

jQuery / Reference / .unwrap()

jQuery / Reference / .unwrap()

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

jQuery / Reference / .before()

jQuery / Reference / .before()

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

jQuery / Reference / .each()

jQuery / Reference / .each()

요소별 콜백의 인덱스와 this를 확인하고, 반복 중단·화살표 함수·비동기 처리의 주의점을 설명합니다.

jQuery / Reference / .slideUp()

jQuery / Reference / .slideUp()

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

jQuery / Reference / .slideDown()

jQuery / Reference / .slideDown()

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