할 일 목록을 만드는 실습을 진행하였다.
1. 실습 내용 및 설명
를 사용하여 구현
2. 틀 구현
## index.html ##
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
@import url('https://fonts.googleapis.com/css2?family=Jua&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Jua&family=Noto+Sans+KR:wght@100..900&display=swap');
.todo_background {
background-color: whitesmoke;
border-radius: 5px;
box-shadow: 2px 2px 2px gray;
width: 500px;
display: flex;
flex-direction: column;
align-items: center;
justify-items: center;
margin: 200px auto auto auto;
}
.todo_background > h1 {
font-family: "Jua", sans-serif;
font-weight: 400;
font-style: normal;
}
.taskList {
margin: 2px auto 2px auto;
background-color: white;
padding: 10px 10px 10px 10px;
margin: 5px auto 10px auto;
border-radius: 5px;
box-shadow: 2px 2px 2px rgb(206, 206, 206);
}
.taskList > p {
font-family: "Jua", sans-serif;
font-weight: 400;
font-style: normal;
display: flex;
align-items: center;
justify-content: center;
margin: 2px auto 2px auto;
width: 300px;
font-size: 20px;
}
.add_task_form {
display: flex;
justify-content: flex-start;
align-items: center;
}
.add_task_form > input {
font-size: 15px;
height: 30px;
}
.add_task_form > button {
margin-left: auto;
font-size: 20px;
margin-left: 20px;
}
.added_task_items {
padding: 10px;
display: flex;
justify-content: flex-start;
align-items: center;
}
.added_task_items > div {
margin-left: auto;
}
.added_task_items > div > button {
margin-left: 20px;
}
</style>
<body>
<div class="body_background">
<div class="todo_background">
<h1 style="font-size:50px">To Do List</h1>
<form class="add_task_form">
<input id="task_input" type="text" placeholder="할 일을 입력하세요">
<button id="submit" type="button">추가</button>
</form>
<ul></ul>
<div class="taskList">
<p>할 일 목록</p>
<div id="my_taskList">
</div>
</div>
</div>
</div>
</body>
<script src="task.js"></script>
</html>
3. 할 일 추가 및 삭제
nextSibling.remove();
으로 해결target.parentElement
로 부모를 찾아서 remove()
로 삭제target.id === "delete"
로 타겟이 삭제 버튼인지 확인하고 수행하도록 수정## task.js ##
const task_parameter = document.querySelector("#task_input");
const add_task_btn = document.querySelector("#submit");
const delete_task_btn = document.querySelector("#delete");
const taskList = document.querySelector("#my_taskList");
add_task_btn.addEventListener("click", function (e) {
e.preventDefault();
const task = task_parameter.value;
temp_html = `${task}<div><button id="delete" type="button">Delete</button></div>`;
if (task.trim() === "") {
alert("할 일을 입력하세요");
return;
}
const span = document.createElement('span');
span.className = 'added_task_items';
span.innerHTML = temp_html;
taskList.appendChild(span);
taskList.append(document.createElement('hr'));
task_parameter.value = "";
});
taskList.addEventListener("click", function (e) {
if (e.target.id === "delete") {
const parent_element = e.target.parentElement.parentElement;
parent_element.nextSibling.remove();
parent_element.remove();
}
});
4. 마무리
깃헙 링크 : To Do List 실습
추후 서버 데이터베이스에 있는 데이터를 삭제, 추가할 때 DOM에서 작동하도록 예습하는 시간이 되었다.
실습 내용을 바탕으로 게시판 API 서버를 만들어보면 좋을 것 같다.