Чтобы решить проблему, не меняя общий подход, при нажатии кнопки редактирования необходимо получить соответствующий элемент (а не только его textContent
) и передать его функции getupdate()
, которая будет обновляться при нажатии кнопки обновления.Относительно небольшие изменения в ваших текущих функциях:
function editText(e) {
let currentText = e.target.parentNode.firstChild;
let currentValue = document.querySelector('.add-text');
currentValue.value = currentText.textContent;
getupdate(currentText, currentValue);
}
function getupdate(currentText, currentValue) {
update.addEventListener('click', updateText);
function updateText() {
currentText.textContent = currentValue.value;
}
}
Есть некоторые другие проблемы с вашим кодом, в частности, создание нескольких элементов с одинаковым идентификатором (который искажен и, вероятно, станет проблематичным, когда вы добавите дополнительные функции).Ниже приведен фрагмент, который решает эту проблему, а также упрощает некоторые из ваших функций и исправляет поиск.
const search = document.querySelector('form input');
const input = document.querySelector('.add-text');
const container = document.querySelector('ul');
let items = null;
let currentItem = null;
const searchItems = (e) => {
if (items) {
let s = e.target.value.toLowerCase();
for (let item of items) {
if (item.firstChild.textContent.toLowerCase().indexOf(s) !== -1) {
item.style.display = 'block';
} else {
item.style.display = 'none';
}
}
}
}
const deleteItem = (e) => {
currentItem = null;
e.target.parentNode.remove();
}
const editItem = (e) => {
currentItem = e.target.parentNode.firstChild;
input.value = currentItem.textContent;
}
const updateItem = (e) => {
if (currentItem) {
currentItem.textContent = input.value;
}
}
const addItem = () => {
let val = input.value
if (val) {
let li = document.createElement('li');
let inner = '<h1 class="text">' + val + '</h1>';
inner += '<button class="delete">Delete</button>';
inner += '<button class="edit">Edit</button>';
li.innerHTML = inner;
container.appendChild(li);
val = '';
currentItem = li.firstChild;
items = document.querySelectorAll('li');
for (let del of document.querySelectorAll('.delete')) {
del.addEventListener('click', deleteItem);
}
for (let edit of document.querySelectorAll('.edit')) {
edit.addEventListener('click', editItem);
}
} else {
alert('please add some text');
return;
}
}
search.addEventListener('keyup', searchItems);
document.querySelector('#add').addEventListener('click', addItem);
document.querySelector('#update').addEventListener('click', updateItem);
<div class="main">
<form>
<input type="text" placeholder="Search">
</form>
<ul></ul>
<div>
<input class="add-text" type="text" placeholder="Add Text">
<button id="add">Add</button>
<button id="update">Update</button>
</div>
</div>