As you have already been told in the comments, it is best to create an id for the task, so that the code can identify it, reviewing your code and add some modifications that may be (I already tried and it works):
Let's go first with the add task function
function agregarTarea(){
let fecha = document.createTextNode(hoyFecha());
//Creas un nuevo span para tarea, asi podras deliminar el texto y usar la fecha unix para identificar cada elemento
let spanTarea = document.createElement('span');
let fechaUnix = Date.now();
////
let nombreTarea = document.getElementById('tareaInput').value;
let nuevoElemento = document.createElement('li');
let enlace = document.createElement('a');
let spanFecha = document.createElement('span');
let botonEditar = document.createElement('button');
let botonBorrar = document.createElement('button');
let iconoEditar = document.createElement('i');
let iconoBorrar = document.createElement('i');
let nuevaTarea = document.createTextNode(nombreTarea);
//Validación si está vacio, agrega la clase is-Valid + mensajeError.
if (nombreTarea === '') {
document.getElementById('tareaInput').className = 'form-control mb-2 is-invalid';
let mensajeError = document.getElementById('mensajeError');
mensajeError.className = 'form-text text-danger mb-2';
}
else{
// Sino, quita la clase is-invalid y mensajeError y agrega la nueva tarea.
document.getElementById('tareaInput').className = 'form-control mb-2';
mensajeError.className = 'form-text text-danger mb-2 d-none';
//A partir de aqui empieza a CREAR todo el HTML de la TAREA que se agregará.
nuevoElemento.className = 'list-group-item';
//Le indico los atributos al enlace
enlace.setAttribute('href', '#');
//Le indico la clase al enlace
enlace.className = 'float-left';
enlace.appendChild(spanFecha);
spanFecha.className = 'badge badge-secondary mr-2';
spanFecha.appendChild(fecha);
//Agrego el texto/nombre de la tarea al enlace
//*******************Agregas el Span, y le agregas un atributo ID que corresponda con la fecha unix, para que no haya Ids repetivos
enlace.appendChild(spanTarea);
spanTarea.setAttribute('id', fechaUnix);
spanTarea.appendChild(nuevaTarea);
//Agrego el enlace al LI
nuevoElemento.appendChild(enlace);
// ############ SE CREA EL BOTON BORRAR ##########
nuevoElemento.appendChild(botonBorrar);
botonBorrar.className = 'btn btn-sm btn-danger btn-borrar float-right'
botonBorrar.appendChild(iconoBorrar);
iconoBorrar.className = 'fas fa-trash-alt';
// ############ FIN BOTON EDITAR ##########
// ############ SE CREA EL BOTON EDITAR ##########
nuevoElemento.appendChild(botonEditar);
botonEditar.className = 'btn btn-sm btn-warning float-right mr-2'
botonEditar.appendChild(iconoEditar);
//*******************En vez de pasar el elemento this, pasas el id del span
botonEditar.setAttribute('onclick', 'editarTarea('+ fechaUnix +');');
iconoEditar.className = 'fas fa-pencil-alt';
// ############ FIN BOTON EDITAR ##########
//Agrego la nueva tarea a la lista
lista.appendChild(nuevoElemento);
//Al ingresar la tarea, deja el contenido del input vacio.
document.getElementById('tareaInput').value = '';
}
actualizarTarea();
}
In the Edit task function, adapt it as follows
function editarTarea(id){
btnAgregar.innerText = 'Editar Tarea';
//Tomas el conteido de la etiqueta span que es el nombre de la tarea
document.getElementById('tareaInput').value =
document.getElementById(id).innerHTML;
}
That should be enough for the button to add the text to the input. I hope it serves you.
Respect, to have the edition saved in the same position, I propose the following:
//Agrega el evento click a TODOS los elementos de la lista para TACHAR Y ELIMINAR la tarea.
//Se hace al principio y despues de agregar una tarea.
function actualizarTarea(){
for (let i = 0; i < listaTareas.children.length; i++) {
//Le asigna la funcion tacharTarea a cada elemento de la lista.
//COMENTAS LA LINEA DE ABAJO, YA NO ES NECESARIA******************
//listaTareas.children[i].addEventListener('click', tacharTarea);
//Le asigna la funcion eliminarTarea a cada elemento de la lista.
btnBorrar[i].addEventListener('click', eliminarTarea);
}
}
//Esta variable se crea para propagar el id del item en edicion cuando se aplica en addEventListener
//con la funcion aplicarCambiosTarea. Aunque podria evitarse el uso de esta variable usando
//una funcion anonima en addEventListener, esto luego dificultaria usar removeEventListener
var idEnEdicion = 0;
function editarTarea(id){
btnAgregar.innerText = 'Editar Tarea';
//Tomas el conteido de la etiqueta span que es el nombre de la tarea
document.getElementById('tareaInput').value = document.getElementById(id).innerHTML;
idEnEdicion = id;//Se toma el id y se asigna a la variable para poder pasar el valor a updateTarea
//Se remueve el evento agregar y se intercambia por editar, esto para separar cada tarea
btnAgregar.removeEventListener('click', agregarTarea);
btnAgregar.addEventListener('click', aplicarCambiosTarea);//Aplica los cambios realizados
}
//Se crea esta nueva funcion para aplicar los cambios provenientes de una edicion
function aplicarCambiosTarea(){
//Toma el valor del input y lo actualiza en el item que se esta modificando
document.getElementById(idEnEdicion).innerHTML = document.getElementById('tareaInput').value;
//Finalizada la edicion, se restaura el boton a su estado inicial de agregar tarea
btnAgregar.innerText = 'Agregar Tarea';
btnAgregar.removeEventListener('click', aplicarCambiosTarea);
btnAgregar.addEventListener('click', agregarTarea);
document.getElementById('tareaInput').value = "";
}
That should be enough with that.