[jQuery] 09_요소 생성 및 제거

2022. 10. 4. 15:32·📗 self-study/📗 KH정보교육원 당산지원

 

더보기

jQuery의 요소 생성 및 제거에 대해 알아보자

 

 

 

 

라이브러리 연결 후 진행하기

 

 

 

동적으로 요소 생성

 

<head>
    <style>
        .added {
            color : palegreen;
        }
    </style>
</head>

<body>
    <button id="btn">요소 생성</button>
    
    <div id="area1"></div>

    <script>
        $(function() {
            // id 속성이 btn인 버튼이 클릭되었을 때 요소를 동적으로 만들기
            $("#btn").click(function(){
                // <p></p>
                // p 태그를 동적으로 만들기 (텍스트노드가 존재하는 요소)

                // 1. 문자열로 만드는 방법
                var el1 = "<p>Create Element By Text</p>";

                // 2. DOM 메소드로 만드는 방법(document.createElement, document.createTextNode)
                // => 순수 자바스크립트 방식
                var el2 = document.createElement("p"); // <p></p> (문자열 아님!)
                var text = document.createTextNode("Create Element By DOM"); // "Create Element By DOM"
                el2.appendChild(text); // <p>Create Element By DOM</p>

                // 3. jQuery를 이용해서 만드는 방법
                var el3 = $("<p></p>").text("Create Element By jQuery"); // <p>Create Element By jQuery</p>

                console.log(el1);
                console.log(el2);
                console.log(el3);

                // 요소에 하위 요소를 추가
                $("#area1").append(el1, el2, el3); // append: jQuery 메소드

            });
        })
    </script>
</body>

 

 

삽입 관련 메소드 part 1 

✔️ 선택된 요소를 기준으로 새로이 생성된 요소를 추가하는 메소드


 👉🏻 $(A).append(B): A 요소 내의 뒷부분에 B를 추가 (자손/하위)
 👉🏻 $(A).prepend(B): A 요소 내의 앞부분에 B를 추가 (자손/하위)
 👉🏻 $(A).before(B): A 요소 앞부분에 B를 추가 (동위)
 👉🏻 $(A).after(B): A 요소 뒷부분에 B를 추가 (동위)

 

 

<head>
    <style>
        .added {
            color : palegreen;
        }
    </style>
</head>

<body>
    <!--  (h1#test$>span{A})*4 + Enter -->
    <h1 id="test1">
        <span>A</span>
        <!-- <span class="added">B</span> -->
    </h1>

    <h1 id="test2">
        <!-- <span class="added">B</span> -->
        <span>A</span>
    </h1>

    <!-- <span class="added">B</span> -->
    <h1 id="test3">
        <span>A</span>
    </h1>

    <h1 id="test4">
        <span>A</span>
    </h1>
    <!-- <span class="added">B</span> -->

    <script>
        $(function() {

            // part1 메소드들
            $("#test1").append("<span class='added'>B</span>");
            $("#test2").prepend("<span class='added'>B</span>");
            $("#test3").before("<span class='added'>B</span>");
            $("#test4").after("<span class='added'>B</span>");

        })
    </script>
</body>

 

 

 

삽입 관련 메소드 part 2 (수동태)

✔️ 갖다불일 요소를 기준으로 작성되는 문법


👉🏻$(B).appendTo(A):  B를 A 요소 내의 뒷부분에 추가 (자손/하위)
👉🏻$(B).prependTo(A): B를 A 요소 내의 앞부분에 추가 (자손/하위)
👉🏻$(B).insertBefore(A): B를 A 요소 앞에 추가 (동위)
👉🏻 $(B).insertAfter(A): B를 A 요소 뒤에 추가 (동위)

 

 

<head>
    <style>
        .added {
            color : palegreen;
        }
    </style>
</head>

<body>
    <!--  (h1#test$>span{A})*4 + Enter -->
    <h1 id="test1">
        <span>A</span>
        <!-- <span class="added">B</span> -->
    </h1>

    <h1 id="test2">
        <!-- <span class="added">B</span> -->
        <span>A</span>
    </h1>

    <!-- <span class="added">B</span> -->
    <h1 id="test3">
        <span>A</span>
    </h1>

    <h1 id="test4">
        <span>A</span>
    </h1>
    <!-- <span class="added">B</span> -->

    <script>
        $(function() {

    <!--  (h1#test$>span{A})*4 + Enter -->
    <h1 id="test5">
        <span>A</span>
        <!-- <span class="added">B</span> -->
    </h1>

    <h1 id="test6">
        <!-- <span class="added">B</span> -->
        <span>A</span>
    </h1>

    <!-- <span class="added">B</span> -->
    <h1 id="test7">
        <span>A</span>
    </h1>

    <h1 id="test8">
        <span>A</span>
    </h1>
    <!-- <span class="added">B</span> -->

    <script>
        $(function() {

    <!--  (h1#test$>span{A})*4 + Enter -->
    <h1 id="test5">
        <span>A</span>
        <!-- <span class="added">B</span> -->
    </h1>

    <h1 id="test6">
        <!-- <span class="added">B</span> -->
        <span>A</span>
    </h1>

    <!-- <span class="added">B</span> -->
    <h1 id="test7">
        <span>A</span>
    </h1>

    <h1 id="test8">
        <span>A</span>
    </h1>
    <!-- <span class="added">B</span> -->

    <script>
        $(function() {

            // part2 메소드들
            $("<span class='added'>B</span>").appendTo("#test5");
            $("<span class='added'>B</span>").prependTo("#test6");
            $("<span class='added'>B</span>").insertBefore("#test7");
            $("<span class='added'>B</span>").insertAfter("#test8");
        });
    </script>
</body>

 

 

 

요소 객체 복제 메소드

👉🏻 var 변수 = $("선택자").clone(true/false);
        => 해당 선택된 요소를 복제할 수 있는 메소드
        => true/false : 해당 선택된 요소에 걸려 있는 이벤트까지 복제를 할 건지에 대한 매개변수
        (기본값 false, 생략 가능)

 

<head>
    <style>
        .item {
            background-color : yellowgreen;
            width : 100px;
            height : 100px;
            line-height : 100px;
            text-align : center;
            margin : 5px;
        }

        .item span {
            font-size : 25px;
            font-weight: bold;
            color : white;
        }
        
        .lime {
            background-color: lime;
        }
    </style>
</head>

<body>
    <button id="clone" >복제</button>

    <div id="clone-test">
        <!-- 테스트용 복제할 요소 -->
        <div id="item1" class="item">
            <span>안녕</span>
        </div>
    </div>

    <div id="clone-result">
	
	    <!-- 복제한 결과를 넣을 공간 -->
    
    </div>

    <script>
        $(function() {

            // 복제할 요소에 hover 이벤트 추가해 보기
            $("#item").hover(function() { // mouseenter
                $(this).addClass("lime");
            }, function() { // mouseout
                $(this).removeClass("lime");
            });

            // 복제 버튼 클릭 시 해당 요소를 복사해서 또 다른 div에 붙여넣기
            $("#clone").click(function () {

                /*
                var copy = $("#item").clone(); // 기본값 false => 이벤트를 복제하지 않음
                //                                       true => 이벤트를 복제함

                $("#clone-result").append(copy);
                */

                // 위 2줄을 아래 1줄로 줄여서 쓸 수 도 있음
                // $("#clone-result").append($("#item1").clone(true));
                // 이렇게도 쓸 수 있음
                $("#item1").clone(true).appendTo($("#clone-result"));

            });

        })
    </script>
</body>

 

 

 

요소 객체 제거 및 잘라내기 메소드

✔️  $("선택자").empty(): 선택된 요소의 모든 하위 요소들을 제거시켜 주는 메소드

👉🏻 var 변수 = $("선택자").remove() / .detach() : 해당 선택된 요소를 제거 후 해당 제거된 요소를 반환 (잘라내기)
    
👉🏻 .remove() : 잘라내기 시 잘라낸 요소의 이벤트를 안 가져옴
👉🏻 .detech() : 잘라내기 시 잘라낸 요소의 이벤트까지 가지고 옴


 
 
 
기본 상태 empty remove detach 
    <!-- button[id=]*3 + Enter -->
    <button id="empty">empty</button>
    <button id="remove">remove</button>
    <button id="detach">detach</button>

    <div id="remove-test" style="border:3px solid red; width:110px; height:110px;">
    <!-- 제거할 요소 -->
    <div id="item2" class="item">
        <span>안녕</span>
    </div>
    </div>

    <br>

    <div id="remove-result" style="border: 3px dashed blue; width:110px; height:110px;">

	    <!-- 붙여넣기를 할 공간 -->
    
    </div>

    <script>
        $(function() {

            // empty 메소드
            $("#empty").click(function() {

                // $("#item2").empty(); // 모든 하위 요소만 제거 (본인은 제외)
                // 자손 요소인 span 태그가 사라짐, 안녕 글자만 사라짐

                // 본인도 제거하고 싶다면?
                // $("#item2").parent().empty(); // parent를 한 번 호출 후 empty() 적용
                $("#remove-test").empty(); // 그 상위의 요소에 empty() 적용

            });

            // remove 메소드
            $("#remove").click(function() {

                var el = $("#item2").remove(); // 이벤트를 안 가지고 옴 (hover 안 먹힘)
                $("#remove-result").append(el);

            });

            // detach 메소드
            $("#detach").click(function() {

                var el = $("#item2").detach(); // 이벤트까지도 가지고 옴 (hover 먹힘)
                $("#remove-result").append(el);

            })

        });
    </script>

 

 

 

응용 문제

        복제 버튼 클릭 시 현재 버튼의 부모 요소인 div를 복제시켜서 result에 붙여넣기
        삭제 버튼 클릭 시 현재 버튼의 부모 요소인 div를 삭제시키기

기본 상태 복제 삭제

 

    <div id="test" class="item">
        <button class="copy">복제</button>
        <button class="delete">삭제</button>
    </div>

    <div id="result"></div>

    <script>
        $(function() {

            // 복제 버튼을 클릭한 경우
            $(".copy").click(function() {
                // var parent = $(this).parent().clone(true);
                // $("$result").append(parent);

                $("#result").append($(this).parent().clone(true));
            });

            // 삭제 버튼을 클릭한 경우
            $(".delete").click(function() {

                // $(this).parent().parent().empty(); // 버튼의 부모의 부모는 body 요소
                                                      // 적합하지 않은 방법

                $(this).parent().remove();
                // empty: 본인 제외 하위 요소 제거
                // remove, detach : 당사자를 지움
            });

        });
    </script>

 

저작자표시 비영리 변경금지 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [jQuery] 11_종합 응용 예시 & 부트스트랩(BootStrap)
  • [jQuery] 10_추가적인 메소드
  • [jQuery] 08_content 영역 관련 메소드
  • [jQuery] 07_탐색(순회)메소드 - 동위
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[jQuery] 09_요소 생성 및 제거
상단으로

티스토리툴바