
1. DOM 추가하기
- 댓글은 append로 추가해야 함
- ajax는 부분 reloading이 가능함
- 프로그램 짜기는 좋으나 ajax를 사용하면 효율이 좋아짐
- ajax가 복잡해져서 나온게 react
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Title</title> <style> .box { 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"); 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>


2. 추가된 박스에 이름 지정하기
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <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"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); let newString = `<div class="box" id="innerBox1">내부박스</div>`; // 아이디가 동일하다는 문제점이 생김 $("#outerBox").append(newString); } 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>


3. 추가된 박스에 숫자 배정하기
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <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> let n = 1; function addAppend() { // let newEl = document.createElement("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${n}">내부박스</div>`; // 아이디가 동일하다는 문제점이 생김 n++; $("#outerBox").append(newString); } 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>


4. 클릭해서 aler창 띄우기
- 아이디를 찾지 못해서 alert창이 안뜸
- 추가할 때 이벤트가 생성되어야 함
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Title</title> <style> .box { margin-top: 10px; border: 1px solid black; padding: 10px; } </style> </head> <body> <h1>추가, 삭제</h1> <button onclick="addAppend()">append로 추가하기</button> <div class="box" id="outerBox"></div> <script> let n = 0; function addAppend() { // let newEl = document.createElement("div"); // newEl.setAttribute("class", "box"); // newEl.setAttribute("id", "innerBox1"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); let newString = `<div onclick="del(${n})" class="box" id="innerBox${n}">내부박스${n}</div>`; // 아이디가 동일하다는 문제점이 생김 $("#outerBox").append(newString); n++; } $("#innerBox1").click(() => { alert("클릭됨"); }); </script> </body> </html>
- 이벤트 시점이 달라서 0부터 뜸
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Title</title> <style> .box { margin-top: 10px; border: 1px solid black; padding: 10px; } </style> </head> <body> <h1>추가, 삭제</h1> <button onclick="addAppend()">append로 추가하기</button> <div class="box" id="outerBox"></div> <script> let n = 0; function addAppend() { // let newEl = document.createElement("div"); // newEl.setAttribute("class", "box"); // newEl.setAttribute("id", "innerBox1"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); let newString = `<div onclick="del(${n})" class="box" id="innerBox${n}">내부박스${n}</div>`; // 아이디가 동일하다는 문제점이 생김 $("#outerBox").append(newString); n++; } function del(n) { alert(`번호: ${n}`); } </script> </body> </html>


- 박스 숫자에 맞는 alert창 띄우기
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Title</title> <style> .box { margin-top: 10px; border: 1px solid black; padding: 10px; } </style> </head> <body> <h1>추가, 삭제</h1> <button onclick="addAppend()">append로 추가하기</button> <div class="box" id="outerBox"></div> <script> let n = 0; function addAppend() { // let newEl = document.createElement("div"); // newEl.setAttribute("class", "box"); // newEl.setAttribute("id", "innerBox1"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); n++; let newString = `<div onclick="del(${n})" class="box" id="innerBox${n}">내부박스${n}</div>`; // 아이디가 동일하다는 문제점이 생김 $("#outerBox").append(newString); } function del(n) { $(`#innerBox${n}`).remove(); } </script> </body> </html>


6. 클릭해서 박스 삭제하기
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Title</title> <style> .box { margin-top: 10px; border: 1px solid black; padding: 10px; } </style> </head> <body> <h1>추가, 삭제</h1> <button onclick="addAppend()">append로 추가하기</button> <div class="box" id="outerBox"></div> <script> let n = 0; function addAppend() { // let newEl = document.createElement("div"); // newEl.setAttribute("class", "box"); // newEl.setAttribute("id", "innerBox1"); // newEl.innerHTML = "내부박스1"; // let el = document.querySelector("#outerBox"); // el.append(newEl); n++; let newString = `<div onclick="del(${n})" class="box" id="innerBox${n}">내부박스${n}</div>`; // 아이디가 동일하다는 문제점이 생김 $("#outerBox").append(newString); } function del(n) { $(`#innerBox${n}`).remove(); } </script> </body> </html>


Share article