🚀 30 Days of JavaScript – Day 20 Today I upgraded my To-Do App with more advanced features. 💡 Project: Advanced To-Do App New features added: • Mark tasks as completed • Edit existing tasks • Delete tasks • Store data using localStorage 🧠 Concepts Used: • DOM manipulation • CRUD operations • local Storage • dynamic UI updates 📌 This project helped me understand how real applications manage and update data. 🎥 Demo below 👇 👉 Source code in (only JS Code). #JavaScript #FrontendDevelopment #WebDevelopment #LearningJavaScript #CodingJourney <script> let tasks = JSON.parse(localStorage.getItem("tasks")) || []; function showTasks() {   let list = document.getElementById("taskList");   list.innerHTML = "";   tasks.forEach((task, index) => {     let li = document.createElement("li");     let text = document.createElement("span");     text.innerText = task.name;     if (task.completed) {       text.classList.add("completed");     }     // actions     let actions = document.createElement("div");     actions.className = "actions";     // complete button     let completeBtn = document.createElement("button");     completeBtn.innerText = "✔";     completeBtn.onclick = function() {       toggleComplete(index);     };     // edit button     let editBtn = document.createElement("button");     editBtn.innerText = "Edit";     editBtn.onclick = function() {         editTask(index);     };     // delete button     let deleteBtn = document.createElement("button");     deleteBtn.innerText = "X";     deleteBtn.onclick = function() {       deleteTask(index);     };     actions.appendChild(completeBtn);     actions.appendChild(editBtn);     actions.appendChild(deleteBtn);     li.appendChild(text);     li.appendChild(actions);     list.appendChild(li);   }); } function addTask() {   let input = document.getElementById("taskInput");   if (input.value === "") {     alert("Enter task");     return;   }   tasks.push({ name: input.value, completed: false });   localStorage.setItem("tasks", JSON.stringify(tasks));   input.value = "";   showTasks(); } function deleteTask(index) {   tasks.splice(index, 1);   localStorage.setItem("tasks", JSON.stringify(tasks));   showTasks(); } function toggleComplete(index) {   tasks[index].completed = !tasks[index].completed;   localStorage.setItem("tasks", JSON.stringify(tasks));   showTasks(); } function editTask(index) {   let newTask = prompt("Edit your task:", tasks[index].name);   if (newTask !== null && newTask !== "") {     tasks[index].name = newTask;     localStorage.setItem("tasks", JSON.stringify(tasks));     showTasks();   } } showTasks(); </script>

To view or add a comment, sign in

Explore content categories