JavaScript - toDoList(할일 목록 만들기)

2023. 8. 21. 02:41·JavaScript
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

'JavaScript' 카테고리의 다른 글

JavaScript 인용구 랜덤으로 출력하기  (69) 2023.08.20
JavaScript 실시간 시간 출력하기  (0) 2023.08.09
JavaScript07 - sort함수를 통한 오름차순,내림차순 정렬  (0) 2023.08.01
JavaScript06 - switch를 사용한 이동효과 만들기  (0) 2023.08.01
JavaScript05 - 조건몬(if) (예시 포함)  (0) 2023.07.31
'JavaScript' 카테고리의 다른 글
  • JavaScript 인용구 랜덤으로 출력하기
  • JavaScript 실시간 시간 출력하기
  • JavaScript07 - sort함수를 통한 오름차순,내림차순 정렬
  • JavaScript06 - switch를 사용한 이동효과 만들기
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      JavaScript
      Spring
      자바기초
      리눅스
      jsp기초
      java
      레디스
      redis 채팅
      Spring Data Redis
      자바
      springsecurity
      리눅스마스터2급
      자바스크립트
      스프링프레임워크
      프로그래머스
      자바 면접질문
      CSS
      Springframework
      HTML
      JSP
      자바 면접
      리눅스마스터2급정리
      백준
      자바 알고리즘
      JS
      Til
      자바 반복문
      spring redis
      jsp request
      redis
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    JavaScript - toDoList(할일 목록 만들기)
    상단으로

    티스토리툴바