Как сохранять отредактированное значение задания в localStorage?? Значение Чекбокс сохранятеся, получилось, а вот с этим пунктом что-то не ладится

Есть todo list, по нажатию на Enter новое задание записывается в li, сохраняется в localStorage. Данное задание я могу удалить или поставить галочку Выполнено, также все эти данные сохраняются в localStorage и при перезагрузке страницы отображаются!
Также сделал редактирование Задания (двойной клик на 'span'). Но измененные данные не записываются в localStorage

let div = document.querySelector('div');
let input = document.createElement('input');
input.placeholder = 'Добавьте дело';
let ul = document.querySelector('ul');
div.appendChild(input);
input.focus();

let tasks = [];

if (localStorage.getItem('tasks')) {
  tasks = JSON.parse(localStorage.getItem('tasks'));
}

tasks.forEach(function(task) {
  let li = document.createElement('li');
  let span = document.createElement('span');
  span.id = 'span';
  span.innerHTML = input.value;
  span.dataset.action = 'edit';

  let button = document.createElement('button');
  button.innerHTML = '[х]';
  button.classList.add('deleteBtn');
  button.dataset.action = 'delete';

  let checkbox = document.createElement('input');
  checkbox.type = 'checkbox';
  checkbox.classList.add('checkboxClass');
  checkbox.dataset.action = 'checkbox';

  if (task.done) {
    checkbox.type = 'checkbox';
    checkbox.classList.add('checkboxClass');
    checkbox.dataset.action = 'checkbox';
    checkbox.id = 'check';
    checkbox.checked = true;
  } else {
    checkbox.type = 'checkbox';
    checkbox.classList.add('checkboxClass');
    checkbox.dataset.action = 'checkbox';
    checkbox.id = 'check';
    checkbox.checked = false;
  }

  let taskText = span.innerHTML;

  const cssClass = task.done ? 'span-done' : 'none'

  li.id = `${task.id}`;
  span.innerHTML = `${task.text}`;
  span.classList.add(`${cssClass}`)

  ul.append(li);
  li.prepend(checkbox);
  li.append(span);
  li.append(button);
  return ul;
})

ul.addEventListener('click', deleteTask);
ul.addEventListener('click', doneTask);
ul.addEventListener('dblclick', editTask);
input.addEventListener('keypress', function(event) {
  if (event.key === 'Enter' && this.value.trim()) {
    addTask('', false);
  }
})


function addTask(task) {
  let li = document.createElement('li');
  let span = document.createElement('span');
  span.id = 'span';
  span.innerHTML = input.value;
  span.dataset.action = 'edit';

  let button = document.createElement('button');
  button.innerHTML = '[х]';
  button.classList.add('deleteBtn');
  button.dataset.action = 'delete';

  let checkbox = document.createElement('input');
  checkbox.type = 'checkbox';
  checkbox.classList.add('checkboxClass');
  checkbox.dataset.action = 'checkbox';

  let taskText = span.innerHTML;

  const newTask = {
    id: Date.now(),
    text: taskText,
    done: false,
  }

  tasks.push(newTask)

  const cssClass = newTask.done ? 'span-done' : 'none'

  li.id = `${newTask.id}`;
  span.innerHTML = `${newTask.text}`;
  span.classList.add(`${cssClass}`)

  ul.append(li);
  li.prepend(checkbox);
  li.append(span);
  li.append(button)

  input.focus();
  input.value = '';

  saveToLS();
  return ul;
}

function deleteTask(event) {
  if (event.target.dataset.action !== 'delete') return;
  const parentNode = event.target.closest('li');
  const id = parentNode.id;
  const index = tasks.findIndex(function(task) {
    if (task.id == id) return true
  });

  tasks.splice(index, 1);
  saveToLS();
  parentNode.remove();
  input.focus();
}

function doneTask(event) {
  if (event.target.dataset.action === 'checkbox') {
    const parentNode = event.target.closest('li');

    const id = parentNode.id;

    const task = tasks.find(function(task) {
      if (task.id == id) {
        return true
      }
    })

    task.done = !task.done;

    const taskTitle = parentNode.querySelector('span');
    taskTitle.classList.toggle('span-done');

    saveToLS();
  }
}

function editTask(event) {
  if (event.target.dataset.action === 'edit') {

    let span = event.target;
    let input = document.createElement('input');
    input.type = 'text';

    input.value = span.innerText;
    span.innerText = '';
    span.append(input);
    input.focus();

    input.addEventListener('blur', function(event) {
      if (!this.value.trim()) return;
      span.innerText = this.value;
    });

    saveToLS();
  }
}

function saveToLS() {
  localStorage.setItem('tasks', JSON.stringify(tasks))
}
ul {
  margin-left: 0;
  margin-top: 5px;
  margin-bottom: 5px;
  padding-left: 0;
}

li {
  list-style-type: none;
  padding: 3px;
}

.checkboxClass {
  padding-right: 3px;
}

.checkboxClass,
.deleteBtn:hover {
  cursor: pointer;
}

span {
  padding-left: 3px;
  padding-right: 4px;
  font-size: 13pt;
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}

.span-done {
  opacity: 0.6;
  text-decoration-line: line-through;
}

.deleteBtn {
  margin: 0;
  padding: 0;
  padding-left: 2px;
  background-color: transparent;
  border: 0;
  /* font-size: 10pt;
            font-family:Georgia, 'Times New Roman', Times, serif;
            font-style: italic; */
}
<div class="container">
</div>

<ul class="list">
</ul>


Ответы (0 шт):