前提・実現したいこと
javaScriptでHTML上ではToDOアプリが完成しました。
ストレージに入れて管理する際に、追加ボタンを押したらストレージにpushして、削除ボタンを押したらspliceしたいです。
pushで1個ずつ入れることはできてもspliceの際に、該当のデータと紐づけすることができませんでした。
HTML上とストレージが同じになるようにしたいです。
発生している問題・エラーメッセージ
spliceに与えるデータとして、data.indexなどとしてみましたが
定義されていない、undefindなどが出てきます。
該当のソースコード
HTML
1<!DOCTYPE html> 2<html> 3 <head> 4 <title>To Do アプリ</title> 5 <link rel="stylesheet" href="src/styles.css"> 6 <meta charset="UTF-8" /> 7 </head> 8 9 <body> 10 <div class="input-area"> 11 <input id="add-text" type="text" placeholder="TODOを入力"> 12 <button id = "add-button">追加</button> 13 </div> 14 15 <div class="imcomplete-area"> 16 <p class="title">未完了のTODOです</p> 17 <div id="imcomplete-list"> 18 <ul> 19 20 </ul> 21 </div> 22 </div> 23 <div class="complete-area"> 24 <p class="title">完了したTODO</p> 25 <div id="complete-list"> 26 <ul> 27 28 </ul> 29 </div> 30 </div> 31 32 <script src="src/index.js"></script> 33 </body> 34</html> 35
import "./styles.css"; const onClickAdd = () => { // テキストを取得 const inputText = document.getElementById("add-text").value; document.getElementById("add-text").value = ""; creteIncompleteList(inputText); addStrage(); } // 未完了リストに追加する関数 const creteIncompleteList = (text) => { // divタグの生成 const div = document.createElement("div"); div.className = "list-row"; // liタグの生成 const li = document.createElement("li"); li.innerText = text // divタグの子要素にliを設定 div.appendChild(li); //未完了のリストに追加 document.getElementById("imcomplete-list").appendChild(div); // button(完了)タグを生成 const completeButton = document.createElement("button"); completeButton.innerText = "完了"; completeButton.addEventListener("click", ()=>{ // 押された完了ボタンの親divを未完了リストから削除 deleteFromCompleteButton(completeButton.parentNode); deleteStrage(); //完了リストに追加 const addTarget = completeButton.parentNode; //TODO内容のテキストの取得 const text = addTarget.firstElementChild.innerText; //div以下を初期化 addTarget.textContent = null; // liを生成 const li = document.createElement("li"); li.innerText = text; // 戻るボタン const backButton = document.createElement("button") backButton.innerText = "戻す"; // // backButtonにイベントを追加 backButton.addEventListener("click",()=>{ const backTarget = backButton.parentNode; const text = backTarget.firstChild.innerText; // 削除 document.getElementById("complete-list").removeChild(backTarget); creteIncompleteList(text); }) const IncompleteButton = document.createElement("button"); IncompleteButton.innerText ="削除"; // backButtonにイベントを追加 IncompleteButton.addEventListener("click",()=>{ // 削除 document.getElementById("complete-list").removeChild(IncompleteButton.parentNode); }) // divタグの子要素に各要路を追加 addTarget.appendChild(li); addTarget.appendChild(backButton); addTarget.appendChild(IncompleteButton); //完了のリストに追加 document.getElementById("complete-list").appendChild(addTarget); }) const deleteButton = document.createElement("button"); deleteButton.innerText = "削除"; deleteButton.addEventListener("click", ()=>{ // 押された削除ボタンの親divを未完了リストから削除 deleteFromCompleteButton(deleteButton.parentNode); }) div.appendChild(completeButton); div.appendChild(deleteButton); }; // 未完了リストから指定の要素を削除 const deleteFromCompleteButton = (target)=>{ document.getElementById("imcomplete-list").removeChild(target); } document.getElementById("add-button").addEventListener("click", () => onClickAdd()); function getStrage() { let list = localStorage.getItem("TodoList"); if (list === null) { return []; } else { return JSON.parse(list); } } function addStrage(item) { let list = getStrage(); list.push(item); setLocal(list); } function deleteStrage(index) { let list = getStrage(); list.splice(index, 1); localStorage.setItem("TodoList", JSON.stringify(list)); } function setStrage(list) { localStorage.setItem("TodoList", JSON.stringify(list)); }
試したこと
deleteStrage()の引数を与えるために
forで回してdata-indexの値を取得して、
data.indexで値を取得できればと考えましたが、undefindや定義されてないと出ていきます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー