Analisei detalhadamente o seu código e precisei fazer algumas mudanças. Espero que me desculpe por isso. Vamos lá:
A função listar()
é a responsável por colocar os filmes na tela, né?
Você estava dando append no body
do documento. Isso dificultaria, e muito, a ação de EXCLUIR elementos da lista. Então, é melhor ter uma div
só pra isso, e eu percebi que você já tinha feito esta div
. ela atende pelo id listaFilmes
.
Então, o que a função deve fazer?
- limpar a lista de filmes (a
div
) - limpar o select (é um bom lugar para fazer isso)
- repopular a lista
- repopular o select
Então, o código dela ficou assim:
function listar() {
//Atualiza lista de filmes
const divLista = document.querySelector('#listaFilmes');
var select = document.querySelector("#removeFilmes");
//Limpa o select
for(var i = select.options.length - 1; i >= 0; i--) {
select.remove(i);
}
//limpa a div que vai receber os nomes dos filmes
divLista.innerHTML = '';
for (var i = 0; i < listaDeFilmes.length; i++) {
divLista.innerHTML += "<figure><img src=" + listaDeFilmes[i] + "><figcaption>" + nomeDeFilmes[i] + "</figcaption></figure>";
//Insere uma nova option no select
select.add(new Option(nomeDeFilmes[i],nomeDeFilmes[i]));
}
}
Depois, percebi que você estava duplicando código desnecessariamente na função adicionarFilme()
. Ora, se listar()
já insere os filmes na tela, por que fazer isso também em outro lugar? Então, eu substituí essa redundância por uma simples chamada a listar()
. A função ficou assim (atente para a linha abaixo do comentário "imprime na tela"):
//Função que insere novos filmes no catálogo
function adicionarFilme(filmeFavorito, nomeFilmeFavorito) {
var elementoFilmeFavorito = "<img src=" + filmeFavorito + ">";
var elementoNomeFilmeFavorito = nomeFilmeFavorito;
//Verifica se o filme desejado já não foi inserido
if (
listaDeFilmes.includes(filmeFavorito) ||
nomeDeFilmes.includes(nomeFilmeFavorito)
) {
var mensagem = document.getElementById("mensagem");
mensagem.innerHTML = "Esse filme já está no catálogo.";
document.getElementById("listaFilmes").value = "";
} else {
//Insere nome do filme no select para caso queira remover
var mensagem = document.getElementById("mensagem");
mensagem.innerHTML = "Ok, filme inserido.";
//empurra para o array
listaDeFilmes.push(filmeFavorito);
nomeDeFilmes.push(nomeFilmeFavorito);
//imprime na tela
listar();
document.getElementById("filme").value = "";
document.getElementById("nomeFilme").value = "";
}
}
Por fim, a exclusão de filmes tava com um código meio confuso. Não sei em que nível do curso você está, mas acho que você já sabe tudo o que eu usei. A função ficou assim:
//função para remover filme do catálogo
function removeFilme() {
var elementoRemoveFilme = document.querySelector("#removeFilmes").value;
if (nomeDeFilmes.indexOf(elementoRemoveFilme) > -1) {
var posicao = nomeDeFilmes.indexOf(elementoRemoveFilme)
nomeDeFilmes.splice(posicao, 1);
listaDeFilmes.splice(posicao, 1);
}
listar();
}
Claro que existem milhões de formas diferentes de resolver o mesmo problema (e essa é a graça dessa nossa área!). Esta é só uma delas. Espero ter ajudado.