[JS]자바스크립트 투두리스트 만들기 (로컬스토리지 저장)

박눌찡·2023년 1월 20일
0

Js_예제 연습

목록 보기
3/3

📌투두리스트 만들기

자바스크립트를 배우면 가장 많이 하는 투두리스트 만들기를 해보았습니다.
아직 배운지 2달 남짓이라 좀 더 디테일한 구성은 짜지는 못했습니다.
가장 기본적인 부분들만 작업해봤습니다.
부족한 부분이 있다면 코멘트도 언제든 환영입니다!😃

TO DO LIST
1. 할일추가 버튼을 누르면 할일 리스트 추가
2. 리스트 클릭 시 줄긋기 이벤트 발생 (addEventListener)
3. 리스트 더블 클릭 시 이벤트 발생 리스트 삭제
4. 로컬 스토리지에 리스트 저장
5. 리스트 삭제 시 로컬스토리지 자동 삭제 기능 추가

먼저 HTML코드를 작성 해줍니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
   <div>
        <h1>📝 To do list</h1>
   </div>
   <div class="container">
     <input id="inputField" type="text"> <!-- text 입력창 만들기 -->
     <button id="addToDo">할일추가</button> <!-- + 버튼 만들기 -->
     <div class="to-dos"> </div> <!-- id = inputField에 할일이 입력되고
    + 버튼이 눌리면 할일이 나타날 공간 만들기 -->
    <ul id="toDoList"></ul>
   </div>
</body>
<script src="/todo list 1/js/script.js"></script>
</html>

script코드로 설정한 id값들을 불러옵니다.

let inputBox = document.getElementById('inputField');
let addToDo = document.getElementById('addToDo');
let toDoList = document.getElementById('toDoList');

이제 함수로 이벤트를 추가해 줍니다.
일단 input창에 텍스트 입력 시 'li'가 생성 되도록 변수를 선언합니다.

addToDo.addEventListener('click', function(){
    let list = document.createElement('li');

자 여기서 만약 input 창에 입력값이 없을 경우 알림창이 뜨게 할 겁니다.
그 내용을 if else문으로 작성 해주었습니다.

 if(!inputBox.value){
        alert('내용입력해야죠!');
    }else{
        list.innerText = inputBox.value;//값을 가져온다.
        toDoList.appendChild(list);
        inputBox.value = '';//입력 버튼누르면 input창은 비워준다.
    }

만약 내용이 입력된게 맞다면 else 문 안의 내용을 실행하게 됩니다.
⭐️ 그리고 저는 addEventListener를 함수로 정리해주었습니다.

  1. 리스트 클릭 시 줄긋기 이벤트 발생 (addEventListener)
  2. 리스트 더블 클릭 시 이벤트 발생 리스트 삭제
function complete(elem){
    elem.addEventListener('click', function(){
        elem.className = 'complete';//style.css에서 가져왔습니다. 
    })
}

function remove(elem){
    elem.addEventListener('dblclick', function(){
        toDoList.removeChild(elem);
     })   
}

⭐️ +style.css 코드 추가

html, body {
    width: 50%;
    margin: 0 auto;
    font-family: Arial, Helvetica, sans-serif;
}

.container {
    width: 360px;
}

.complete{
    text-decoration: line-through;
    color: pink;
}

#inputFiled {
    width: 300px;
    height: 46px;
    border: 1px solid black;
    outline: none;
    font-size: 25px;
    vertical-align: middle;
}

.to-dos {
    margin-top: 25px;

}

#toDoList {
    font-size: 25px;
}

여기까지 잘 실행이 되었다면 이런 결괏값이 나올겁니다.

한번 클릭 시 라인이 쳐지고 핑크색으로 변하게 이벤트를 추가했습니다.

더블 클릭 시 리스트에서 삭제 되게 하였습니다.

📌 여기까지가 제가 구현한 투두리스트 구현이었습니다.
추가로 이걸 localStorage에 저장되고 또 삭제가 되도록 코드를 수정합니다.

  1. 로컬 스토리지에 리스트 저장
  2. 리스트 삭제 시 로컬스토리지 자동 삭제 기능 추가

로컬스토리지에 리스트가 저장될 수 있게 initialize함수를 선언합니다.

function initialize(){
    toDoList.innerHTML = localStorage.getItem('list');
    let toDoElments = toDoList.querySelectorAll('li');
    toDoElments.forEach(each=>{
        complete(each); //위에 함수 값 가져오기 
        remove(each); //위에 함수 값 가져오기 
    })
}

여기서 함수를 작성 후 index.html body에 onload를 추가해줍니다.

<body onload="initialize()"> //⭐️⭐️⭐️
   <div>
        <h1>📝 To do list</h1>
   </div>
   <div class="container">
     <input id="inputField" type="text"> <!-- text 입력창 만들기 -->
     <button id="addToDo">할일추가</button> <!-- + 버튼 만들기 -->
     <div class="to-dos"> </div> <!-- id = inputField에 할일이 입력되고
    + 버튼이 눌리면 할일이 나타날 공간 만들기 -->
    <ul id="toDoList"></ul>
   </div>
</body>
<script src="./js/script.js"></script>
</html>

그럼 로컬스토리지에 저장되는 것은 실현이 될 겁니다.
확인은 개발자 도구창에 Application창을 확인해 봅니다.

이제 remove 함수 즉 더블클릭 시 리스트가 삭제 될 때 로컬스토리지에서도
함께 삭제 될 수 있게 코드를 작성 해줍니다.
더블 클릭 시 실행되는 내용이기 때문에 저는 remove 함수 안에
추가해주었습니다.

function remove(elem){
    elem.addEventListener('dblclick', function(){
        toDoList.removeChild(elem);
        localStorage.setItem('list', toDoList.innerHTML); 		
        // 내용을 지운다가 아니라, 이너 HTML의 값을 덮어씌운 것임. 
    })   
}

여기서 중요한 것은 로컬스토리지를 지운다는 동작이라기 보다.
리스트가 지워진 innerHTML을 다시 덮어 씌워주어서 구현하였습니다.

profile
개발자 성장 과정 기록

0개의 댓글