Я создавал список дел, и в нем есть две кнопки для каждой записи: «Готово», чтобы пролистывать завершенные задачи, и «Удалить», чтобы удалить его. И когда я удаляю второй элемент, он удаляет первый вместо второго. Как я могу это исправить? Спасибо.
Вот HTML
<body>
<header>
<h1>To Do List</h1>
<div class = "addItems">
<input type = "text" name = "text" id = "addThis" onfocus = "this.value=''">
<input type = "button" value = "Add" id = "addBtn">
</div>
</header>
<section class = "checkList">
<ul class = "list"></ul>
</section>
Вот JS
addButton.addEventListener('click' , add);
function add(){
let input = document.getElementById('addThis').value;
let newLi = document.createElement('li');
newLi.id = "listNewItem";
newLi.style.listStyleType = "none";
newLi.style.backgroundColor = "#f4f4f4";
newLi.style.padding = "10px";
newLi.style.marginBottom = "10px";
newLi.appendChild(document.createTextNode(input));
let deleteBtn = document.createElement('button')
console.info(newLi);
let list = document.querySelector('.list');
list.insertBefore(newLi, list.childNodes[2]);
let delBtn = document.createElement('button');
delBtn.id = "doneButn";
delBtn.className = "delete";
delBtn.setAttribute("onclick" , "done()");
delBtn.appendChild(document.createTextNode("Remove"));
newLi.appendChild(delBtn);
let doneSubBtn = document.createElement('button');
doneSubBtn.id = "alreadyDone";
doneSubBtn.className = "done";
doneSubBtn.setAttribute("onclick" , "finished()");
doneSubBtn.appendChild(document.createTextNode("Done"));
newLi.appendChild(doneSubBtn);
}
function done(){
let del = document.getElementById('doneButn');
let li = del.parentNode;
li.remove();
}
function finished(){
let liText = document.getElementById('alreadyDone').parentNode;
liText.style.textDecoration = "line-through";
}
У вас есть несколько элементов с одинаковым идентификатором (doneButn
) — тогда целевым является первый элемент (идентификатор должен быть уникальным).
Используйте параметр функции, чтобы сообщить JS, какой элемент должен быть целевым.
delBtn.setAttribute("onclick" , "done(this)");
^^^^
...
function done(el){
// ^^
let li = el.parentNode;
// ^^
li.remove();
}