DOM 추가하기

Feb 21, 2024
DOM 추가하기

append / prepend 링크

바닐라 ★append 많이 쓰인다★

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .box { margin-top: 10px; border: 1px solid black; padding: 10px; } </style> </head> <body> <h1>추가하기</h1> <button onclick="addAppend()">append로 추가하기</button> <button onclick="addPrepend()">prepend로 추가하기</button> <button onclick="addBefore()">before로 추가하기</button> <button onclick="addAfter()">after로 추가하기</button> <div class="box" id="outerBox"> </div> <script> function addAppend() { let newEl = document.createElement("div"); newEl.setAttribute("class", "box"); newEl.setAttribute("id", "innerBox1"); //id, innerBox1 속성을 줬으니, 애는 이제 id innerBox1이다. (자세한 설명은 아래에) newEl.innerHTML = "내부박스1"; let el = document.querySelector("#outerBox"); el.append(newEl); } function addPrepend() { let newEl = document.createElement("div"); newEl.setAttribute("class", "box"); newEl.setAttribute("id", "innerBox2"); newEl.innerHTML = "내부박스2"; let el = document.querySelector("#outerBox"); el.prepend(newEl); } function addBefore() { let newEl = document.createElement("div"); newEl.setAttribute("class", "box"); newEl.setAttribute("id", "innerBox3"); newEl.innerHTML = "내부박스3"; let el = document.querySelector("#outerBox"); el.before(newEl); } function addAfter() { let newEl = document.createElement("div"); newEl.setAttribute("class", "box"); newEl.setAttribute("id", "innerBox4"); newEl.innerHTML = "내부박스4"; let el = document.querySelector("#outerBox"); el.after(newEl); } </script> </body> </html>
notion image
//id 하나 추가 된 모습! id를 동적으로 만들어냄
notion image
 

setAttribute를 사용해 자바 스크립트로 동적으로 만들어내기

notion image
2개의 코드는 다르다. console 확인 ㄱㄱ
notion image
1. 자바 스크립트가 인식하는 DOM 객체 2. 그냥 문자열
 

 
notion image
notion image
setAttribute("class", "box"); 이렇게 코드를 작성하면, 아까 봤던 '순수한 div'에 클래스가 붙을 것이다. (콘솔창에서 봐야함)
attribute (속성)은 바로 이런 걸 말한다. class, id 이런 것!
notion image
 

 
notion image
notion image
이렇게 작성하면 이 코드의 attribute가 2개 추가 될 것이다 -> 이런 것들을 자바 스크립트로 동적으로 만들어낼 수 있구나!
💡
객체의 상태 = 속성 (attribute)
 

html의 <div> 태그에 어떤 속성들이 있어?

notion image
이런 것들을 엘레멘트.클래스 이런 식으로 해서 찾을 수 있겠구나
 

 
notion image
이런 것들을 물어보면서.... vs 코드에서 공부해보자!
 

innerHTML / innerText

notion image
innerHTML은 HTML 코드 인식 O innerText는 HTML 코드 인식 X -> 쓸 일 잘 없음
notion image
//innerHTML
notion image
//innerText → HTML 코드 인식 안 되고 TEXT로 인식 됐다!
 

val() (input 태그에 사용)

notion image
내가 만든 객체를 #outerBox를 찾아서 append 한다
 

[ 위에서 적은 코드를 한 줄로 표현 가능 ]

notion image
💡
백틱( ` )을 사용해서 안에 홀따옴표(’ ‘)를 사용하지 말고 “ “ 로 사용하자!
notion image
notion image
💡
완성은 했으나… 실행이 이상하게 나온다. → 제이쿼리로 바꾸자!
 
 
💡
자바 스크립트로 하면 이런 풀코드가 필요하네… jQuery로 바꿔보자!
 

jQuery로 변경 하자

[ 추가하기 코드 ]

<script> function addAppend() { // let newEl = document.createElement("div"); // console.log(newEl); // console.log("<div></div"); // newEl.setAttribute("class", "box"); // newEl.setAttribute("id", "innerBox1"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); let newString = `<div class="box" id="innerBox">내부박스</div>`; $("#outerBox").append(newString); }

[ jQuery로 바꿨을 때, 실행 화면 ]

notion image

[ 이렇게 사용하면 좋은 점 ]

notion image
디자인을 자바 스크립트 function에 넣어놓고 땡겨쓸 수 있음! -> 재사용 가능!
 

그러나!! id가 중복되는 문제 발생!

그러나!! id가 유일하지 않은 문제가 있다. id가 유일하지 않으면 삭제하고 싶은 특정한 엘리먼트를 찾을 수가 없어서 삭제를 못함
<script> let n = 1; function addAppend() { let newString = `<div class="box" id="innerBox1${n}">내부박스${n}</div>`; n++; $("#outerBox").append(newString); }
notion image
💡
id 값이 다 다르게 나오는 것 확인! → 바꿔보자! → DOM 삭제하기 (전역변수 이용)
 
💡
id는 유일해야한다!
 
Share article

codingb