実現したいこと
Javascriptの「createElement」で作成したチェックボックスたちを、
あるボタンを押すことで一括で選択できるようにしたい。
前提
ドットインストールの「javascriptでtodo管理アプリを作ろう」を学びました。
その後、作成したリストたちを一括選択をした上で削除ができる機能をつけたいと思いましたが、うまくいきません。どのようにすれば実現可能でしょうか。
該当のソースコード
<HTML>
<h1> <button id="checkAll">checkAll</button> todoリスト <button id="purge">purge</button> </h1> <div class="todo-container"> <ul id="todos"> <!-- jsのtodoリストが入る --> </ul> </div> <div class="form-container"> <form id="add-form" class="footer"> <input type="text" placeholder="ここにtodoを入力する"> <button>Add</button> </form> </div>
<script.js> let todos; if (localStorage.getItem('todos') === null) { todos = []; } else { todos = JSON.parse(localStorage.getItem('todos')); } const saveTodos = () => { localStorage.setItem('todos', JSON.stringify(todos)); }; const renderTodo = (todo) => { const input = document.createElement('input'); input.type = 'checkbox'; input.checked = todo.isCompleted; input.addEventListener('change', () => { todos.forEach((item) => { if (item.id === todo.id) { item.isCompleted = !item.isCompleted; } }); saveTodos(); }); const span = document.createElement('span'); span.textContent = todo.title; const label = document.createElement('label'); label.appendChild(input); label.appendChild(span); const button = document.createElement('button'); button.textContent = 'x'; button.addEventListener('click', () => { if (!confirm('選択したタスクを削除する?')) { return; } li.remove(); todos = todos.filter((item) => { return item.id !== todo.id; }); saveTodos(); }); const li = document.createElement('li'); li.appendChild(label); li.appendChild(button); document.querySelector('#todos').prepend(li); }; const renderTodos = () => { todos.forEach((todo) => { renderTodo(todo); }); }; document.querySelector('#add-form').addEventListener('submit', (e) => { e.preventDefault(); const input = document.querySelector('#add-form input'); const todo = { id: Date.now(), title: input.value, isCompleted: false, }; renderTodo(todo); todos.push(todo); console.table(todos); saveTodos(); input.value = ''; input.focus(); }) ★★★★★★★★★★★★★ここに、一括選択のコードを書きたいです。★★★★★★★★★★★★ document.querySelector('#purge').addEventListener('click', () => { if (!confirm('選択したリストを削除しますか?')) { return; } todos = todos.filter((todo) => { return todo.isCompleted === false; }); saveTodos(); document.querySelectorAll('#todos li').forEach((li) => { li.remove(); }); renderTodos(); }); renderTodos(); }
試したこと
ベースは、最後の方のコードであるpurgeと同じ要領なのかなと思い、以下のあたりで色々と当てはめてみたのですが、見当違いのものを当てはめているようでエラー(下記)ばかりになってしまいました。。
エラー:◯◯ is undefined, ◯◯ is not a function
document.querySelector('#checkAll').addEventListener('click', () => { todos = todos.filter((todo) => { return todo.isCompleted === false; }); saveTodos(); document.querySelectorAll('#todos li').forEach((li) => { ★この辺りで、「todo.isCompleted === true」になるようなコードがあれば良いのかなと・・・ }); renderTodos(); });
知見のある方がいらっしゃいましたら、ご教授いただけますと幸いです。
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/30 01:52
2023/08/30 01:56 編集
2023/08/30 02:23
2023/08/30 03:25
2023/08/30 04:24
2023/08/30 04:28
2023/08/30 04:53
2023/08/30 05:03 編集
2023/08/30 05:24
2023/08/30 05:34 編集
2023/08/30 05:52