I have something like the Todo app with the ability to delete, edit and save to localstorage. There is a problem with editing. When I created 1 task and tried to edit it, everything went well and the changes were saved. But when I created 2 tasks on the page and tried to edit the last (lower) one, nothing happened, more precisely, this task (which I edited) disappeared. Simply put, no matter how many tasks there are on the page, I can only edit the top one (on the page) How to make it so that you can edit any task?
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" />
<link rel="stylesheet" href="assets/css/style.css" />
<title>Document</title>
</head>
<body>
<div class="container">
<div class="sett">
<input type="text" name="" class="input" placeholder="Введите задачу" />
<button class="button">Добавить</button>
</div>
<div class="list">
<ul class="ul"></ul>
</div>
</div>
<button class="delete_sto">Удалит local</button>
<!-- <button class="button_delete">Удалить все</button> -->
<!-- <button class="red">Речить все</button> -->
<script src="assets/js/main.js"></script>
</body>
</html>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: gray;
}
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: chocolate;
width: 900px;
min-height: 500px;
}
.sett {
text-align: center;
margin-top: 15px;
}
.sett input {
width: 200px;
height: 40px;
border: none;
border-radius: 25px;
outline: none;
padding-left: 5px;
}
.sett button {
width: 200px;
height: 40px;
border: none;
border-radius: 25px;
}
.list {
margin-top: 10px;
margin-left: 10px;
}
.task {
margin-top: 15px;
background-color: blueviolet;
min-width: 300px;
min-height: 50px;
}
.buttons {
display: flex;
}
.button_delete {
width: 200px;
height: 40px;
border: none;
border-radius: 25px;
background-color: rgb(135, 29, 29);
}
.red {
width: 200px;
height: 40px;
border: none;
border-radius: 25px;
background-color: rgb(16, 118, 219);
}
.text {
border: 1px solid black;
width: auto;
height: 200px;
}
JS
//ИНИЦИЛИЗАЦИЯ
let input = document.querySelector(".input"); //Текст таска
let create_task = document.querySelector(".button"); //Создать
let ul = document.querySelector(".ul");
let delete_sto = document.querySelector(".delete_sto");
create_task.addEventListener("click", newtask);
let task = document.querySelector(".task");
delete_sto.addEventListener("click", function () {
localStorage.clear();
});
let obj = {};
for (let i = 0; i < localStorage.length; i++) {
let key = localStorage.key(i);
ul.innerHTML += `<div class="task">
${localStorage.getItem(key)}
</div>`;
}
function newtask() {
let date = new Date();
//Добавление таска на страницу
ul.insertAdjacentHTML(
"afterbegin",
`
<div class="task">
<div class="text" contenteditable="true">
${input.value}
</div>
<button class="button_delete">Удалить</button>
<button class="check">Добавить checkbox</button>
<button class="red">Редактировать</button>
<p class="data">${
date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds()
}</p>
</div>
`
);
//Сохранение таска в localstorage
let HTMLtask = document.querySelector(".task");
let HTMLparse = HTMLtask.innerHTML;
localStorage.setItem(input.value, HTMLparse);
//УДАЛИТЬ
let button_del = document.querySelector(".button_delete");
button_del.addEventListener("click", del);
//РЕДАКТИРОВАТЬ
let red = document.querySelector(".red");
red.addEventListener("click", redd);
//Добавить чекбокс
let newcheck = document.querySelector(".check");
newcheck.addEventListener("click", function () {
let oldkey = localStorage.key(this.parentNode.children[0].innerText);
localStorage.removeItem(oldkey);
let tasktext = document.querySelector(".text");
let ch = document.createElement("input");
ch.type = "checkbox";
tasktext.append(ch);
let HTMLtask = document.querySelector(".task");
let HTMLparse = HTMLtask.innerHTML;
let newkey = red.parentNode.children[0].innerText;
localStorage.setItem(newkey, HTMLparse);
});
}
let button_del = document.querySelector(".button_delete");
button_del.addEventListener("click", del);
let red = document.querySelectorAll(".red");
red.addEventListener("click", redd);
function redd() {
let red = document.querySelector(".red");
let oldkey = localStorage.key(red.parentNode);
console.log(oldkey);
localStorage.removeItem(oldkey);
let newkey = red.parentNode.children[0].innerText;
console.log(newkey);
let parse = this.parentNode.innerHTML;
console.log(parse);
localStorage.setItem(newkey, parse);
}
function del() {
let button_del = document.querySelector(".button_delete");
button_del.parentNode.remove();
let key = localStorage.key(this);
localStorage.removeItem(key);
}