JavaScript
JavaScript - toDoList(할일 목록 만들기)
공부하고 기억하는 공간
2023. 8. 21. 02:41
728x90
반응형
SMALL
⏬ HTML 준비 코드
<form id="todo-form">
/* 할 일을 적을 입력칸*/
<input type="text" placeholder="Write To do list and Press Enter" required>
</form>
<ul id="todo-list">
/* 적은 입력이 저장되는 출력칸*/
</ul>
⏬JS 코드
🔆각 요소 값 변수에 저장 및 입력한 값을 담을 배열 생성
//입력 폼
const toDoForm = document.querySelector('#todo-form')
//입력
const toDoInput = toDoForm.querySelector('input')
//출력할 ul요소
const toDoList = document.querySelector('#todo-list')
/**localstorage에는 오직 text만 저장 가능하다. */
let toDos = [];
/*자주 사용하는 단어(상수)는 오타를 치지 않도록 변수에 담아서 사용한다.*/
const TODOS_KEY = "todos";
🔆원하는 내용을 submit할 때 발생할 이벤트(function)
function handleToSubmit(event) {
event.preventDefault(); //모든 이벤트 중단
const newTodo = toDoInput.value; //input의 내용을 담은 newTodo
const newTodoObj = { //각 입력을 구분하기 위해 text와 id를 함께 담음
text:newTodo,
id:Date.now(), //Date.now는 밀리세컨단위로 현재 시간을 알 수 있다.
};
toDos.push(newTodoObj); //할일 목록을 배열에 담음
toDoInput.value=""; //내용 초기화
paintToDo(newTodoObj); //화면에 출력
saveToDos(); //배열을 저장
}
//입력form에서 submit 이벤트가 발생하는 경우 handleToSubmit함수 실행
toDoForm.addEventListener("submit",handleToSubmit);
🔆해당 입력 내용을 배열에 저장하고 출력하는 함수(LocalStorage를 사용)
🔆삭제버튼을 리스트의 각 내용마다 버튼형식으로 추가
🔆개발자 도구 > 애플리케이션 > LocalStorage에서 확인할 수 있습니다.
🔆임시적으로 값을 보관하는 장소
function paintToDo(newTodo) {
const li = document.createElement('li'); //li요소를 불러옴
li.id = newTodo.id; //li의 id 는 newTodo.id;
const span = document.createElement('span'); //span의요소를 불러옴
li.appendChild(span); //li에 span추가
const button = document.createElement('button'); //button요소를 불러옴
button.innerText="❌"; //button내용 추가
button.addEventListener("click",deleteToDo) //button클릭시 deleteToDo가 수행됨
li.appendChild(button); //버튼을 li에 추가
span.innerText=newTodo.text; //span의 내용은 newTodo에서 입력한 텍스트
toDoList.appendChild(li); //toDolist(ul)에 li를 추가
}
function saveToDos() {
/** JSON.stringify(값) : 어떤 object든 String으로 바꿔준다.
* 반대로 JSON.parse() 는 어떤 문자열을 javascript가 사용할 수 있는 내용으로 바꿔준다.
* 예시 : JSON.parse(localStorage.getItem("todos")) >> 결과값 ["a","b","c"]
*
*/
localStorage.setItem(TODOS_KEY,JSON.stringify(toDos));
}
🔆원치 않는 내용을 삭제할 함수
function deleteToDo(event) {
const li = event.target.parentElement; //누른button의 부모요소인 li를 불러온다.
toDos= toDos.filter(todo => todo.id != parseInt(li.id));
li.remove(); // li를 제거
saveToDos();
}
728x90
반응형
SMALL