본문 바로가기

JavaScript/DAY 36 _ 23.10.13

Element의 생성 / 삭제 / 추가

        // 1. 생성 : createElement★★★
        // --> 문법 : document.createElement("tagname");
        // --> 하지만 이렇게 정의한것만으로는 아무일도 일어나지 않아.
        // --> 이걸 어디다 붙일건지가 중요!!!!

        function test1(){

            // 1-1. 생성
            const createLi = document.createElement("li");
            const createBtn = document.createElement("button");

            // 1-2. 정보변경
            createLi.innerText = "li추가중";
            createBtn.innerText = "이것이 버튼추가";

            // 1-3. 스타일변경
            createLi.classList.add("fs-2", "text-danger");

            // 1-4. 부모에게 붙이기
            const getTitleListBox = document.getElementById("titleListBox");
            getTitleListBox.appendChild(createLi); 
            getTitleListBox.appendChild(createBtn);
            // --> " " 안쓰는 이유? : 추가하고자 하는 실제 DOM 노드를 인수로 제공해야 함
            
        }

 

        // 2. 생성2

        function test2(){ // 순차적으로
            // 2-1. li만들고
            const createLi = document.createElement("li");

            // 2-2. li안에 첫번째 span
            const span1 = document.createElement("span");
            span1.innerText = "제목....";
            createLi.appendChild(span1);

            // 2-2. li안에 두번째 span
            // 순서 주의. x가 먼저 붙으면 안됨(삭제버튼이니까)
            const span2 = document.createElement("span");
            span2.innerText = " X ";
            createLi.appendChild(span2);

            // 2-3. titleListBox 뒤에 추가추가
            const titleBox = document.getElementById("titleListBox");
            titleBox.appendChild(createLi);

        }

 

        // 3. 요소 삭제

        function test3(){
            const getTitleListBox = document.getElementById("titleListBox");
            getTitleListBox.remove();
        }
                    // 이러면 box전체가 사라지니까 null뜨면서 내용 추가가 안되지?

 

        // 4. 요소 삭제2 (X를 누르면 그 줄이 삭제되도록)

        function test4(){
            const li = document.createElement("li");

            const span1 = document.createElement("span");
            span1.innerText = "제목....";
            li.appendChild(span1);

            const span2 = document.createElement("span");
            span2.innerText = " X ";
            span2.setAttribute("onclick", "removeTitle(this)");         // --> text2에 이 줄만 추가됨
            li.appendChild(span2);

            const titleBox = document.getElementById("titleListBox");
            titleBox.appendChild(li);

        }

        // 4-1. X를 누르면 그 줄을 지우는 function

        function removeTitle(targetElement){
            targetElement.parentElement.remove();
        }

 

        // 5. 내용 초기화 : .innerHTML --> 이 케이스에만 사용하기!!!!!!!!

        function test5(){
            const titleListBox = document.getElementById("titleListBox");
            // titleListBox.remove();   
            // --> 이런식으로하면 삭제는 되는데, 다시 추가시키려면 null exception! 리스트 자체가 삭제되는거니까..
            titleListBox.innerHTML = "";
        }

 

        // 6. 반복하는 것들 : 템플릿 만들어두기! --> 일반적으로 body맨밑쪽에 넣어둔다
        // 템플릿 - 수정할 일이 발생할 경우 하나하나 수정할 필요 없이 템플릿만 수정하면 됨

    <!-- 템플릿생성 -->
    <!-- d-none없이 그냥 두면 페이지 생성시 '제목제목 X 버튼'이 맨 밑에 써져있겠지 -->
    <!-- 보이지 않아야 하는 것들은 잘 숨겨줘야한다!!!!! -->
    <div id="templete" class="d-none">
        <li class="titleTemplete">
            <span class="title">제목제목</span>
            <span onclick="removeTitle(this)">X 버튼</span>
        </li>
    </div>



        // 그냥 cloneNode만 쓰면? : <li>만 복사.<span>은 복사x
        // (true)넣으면? : 깊은 복사. 
        //  ---> <span>까지 복사해서 리턴(새로만든 <li>를 리턴-복사본). 거의 100% true를 사용함

       
        function test6(){

            // 6-1. 템플릿 복사
            // const titleTemplete = document.getElementsByClassName("titleTemplete").cloneNode(true);
            const titleTemplete = document.querySelector("#templete > .titleTemplete").cloneNode(true);

            // 6-2. 데이터 조작
            titleTemplete.querySelector(".title").innerText = "제목...." + Math.random();

            // // 6-3. 합치기
            document.getElementById("titleListBox").appendChild(titleTemplete);

        }

        // ※ cloneNode 메서드 :
        // 배열 또는 NodeList에 적용할 수 없으며, 

            getElementsByClassName로 선택된 요소 컬렉션에는 cloneNode 메서드가 정의되어 있지 않습니다.
        // 반면, document.querySelector는 단일 요소만 반환하므로 

          해당 요소에 직접 cloneNode 메서드를 사용할 수 있습니다.

'JavaScript > DAY 36 _ 23.10.13' 카테고리의 다른 글

DOM element 조작  (0) 2023.10.16
DOM API★  (0) 2023.10.13
DOM Basic  (0) 2023.10.13