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 / :button

jQuery / Reference / :button

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

jQuery / Reference / .appendTo()

jQuery / Reference / .appendTo()

삽입할 내용을 먼저 지정해 대상의 마지막 자식으로 넣는 방법과 반환 집합, 이동·복제 동작을 설명합니다.

jQuery / Reference / .toggleClass()

jQuery / Reference / .toggleClass()

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

jQuery / Reference / .each()

jQuery / Reference / .each()

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

jQuery / Reference / .insertBefore()

jQuery / Reference / .insertBefore()

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

jQuery / Reference / .empty()

jQuery / Reference / .empty()

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

jQuery / Reference / .width()

jQuery / Reference / .width()

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

jQuery / Reference / .removeAttr()

jQuery / Reference / .removeAttr()

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

jQuery / Reference / .css()

jQuery / Reference / .css()

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

jQuery / Reference / .has()

jQuery / Reference / .has()

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