보라코딩

노마드코더 자바스크립트 강의 _ ToDoList JS 코드 본문

코딩/HTML5, CSS3, JS

노마드코더 자바스크립트 강의 _ ToDoList JS 코드

new 보라 2023. 9. 19. 12:59

재밌게 들었고 진짜 좋은 강의라 생각된다.

localstorage와 filter를 사용하는 것도 알게 되었고

개발자 모드에서 network나 application을 보는 법도 배웠다.

 

강의가 길지 않아서 자바스크립트 정리하는 느낌으로 듣기 참 좋다 :)

 

 

 

todo.js
 
 
const toDoForm = document.getElementById("todo-form");
const toDoList = document.getElementById("todo-list");
const toDoInput = document.querySelector("#todo-form input");

const TODOS_KEY = "todos";

let toDos = []; // let으로 해서 update 가능하게

// 삭제 버튼 함수 ⭐⭐⭐⭐⭐
function deleteToDo(event) {
  //console.log(event.target.parentNode.innerText);
  const li = event.target.parentElement;
  li.remove();

  toDos = toDos.filter((toDo) => toDo.id !== parseInt(li.id));
  saveToDos();
}

// To Do List에 추가 함수
function paintToDo(newTodo) {
  const li = document.createElement("li");
  li.id = newTodo.id;

  const span = document.createElement("span");
  span.innerText = newTodo.text;

  const button = document.createElement("button");
  button.innerText = "❌";
  button.addEventListener("click", deleteToDo);

  li.appendChild(span);
  li.appendChild(button);

  toDoList.appendChild(li);
}

// input submit 관련 함수
function handleToDoSubmit(event) {
  event.preventDefault();

  const newTodo = toDoInput.value;
  toDoInput.value = "";

  const newTodoObj = {
    text: newTodo,
    id: Date.now(),
  };

  toDos.push(newTodoObj); // 배열에 Object 넣기
  paintToDo(newTodoObj);
  saveToDos();
}

toDoForm.addEventListener("submit", handleToDoSubmit); // form에서 엔터키 누르면 submit 이벤트 자동 발생

// localStorage에 저장
function saveToDos(event) {
  localStorage.setItem(TODOS_KEY, JSON.stringify(toDos));
}

const savedToDos = localStorage.getItem(TODOS_KEY);

if (savedToDos !== null) {
  const parsedToDos = JSON.parse(savedToDos);
  console.log(parsedToDos);
  toDos = parsedToDos;
  parsedToDos.forEach(paintToDo); // 매개변수로 parsedToDos가 들어가며 콜백 함수 호출
}

'코딩 > HTML5, CSS3, JS' 카테고리의 다른 글

자바스크립트로 날씨  (0) 2023.09.19
JS 모듈화, ajax (어렵..)  (1) 2023.05.16
Day60_230323_ jQuery 끝  (0) 2023.03.23
Day59_230322_ jQuery (animate)  (0) 2023.03.22
Day58_230321_ jQuery (setInterval, fadeiIn, prepend, empty)  (0) 2023.03.21