1
resposta

Só funciona nos elementos adicionados

const form = document.getElementById("novoItem")
const lista = document.getElementById("lista")
const itens = JSON.parse(localStorage.getItem("itens")) || []

itens.forEach((elemento) => {
    criaElemento(elemento)
})

form.addEventListener("submit", (evento)=> {
    evento.preventDefault()

    //=> evento.target.elements['nome'].value  busca o valor -.value- do elemento a partir do name do input -name:"nome"-
    //=> evento.target.elements['quantidade'].value busca o valor -.value_ do elemento a partir do nome do input -name:"quantidade"-

    const nome = evento.target.elements['nome']
    const quantidade = evento.target.elements['quantidade']

    const existe = itens.find(elemento => elemento.nome === nome.value)

    const itemAtual = {
        "nome" : nome.value,
        "quantidade": quantidade.value
    }

    if (existe){
        itemAtual.id = existe.id

        atualizaElemento(itemAtual)
        itens[existe.id] = itens.length

    }else{
        itemAtual.id = itens.length
        criaElemento(itemAtual)
        itens.push(itemAtual)
    }

    localStorage.setItem("itens", JSON.stringify(itens)) 

     nome.value = ""
     quantidade.value = "" 
})

function criaElemento(item){
    const novoItem = document.createElement('li')
    novoItem.classList.add("item")

    const numeroItem = document.createElement("strong")
    numeroItem.innerHTML = item.quantidade
    numeroItem.dataset.id = item.id
    novoItem.appendChild(numeroItem) 
    novoItem.innerHTML += item.nome

    lista.appendChild(novoItem)
}

function atualizaElemento(item){
     document.querySelector("[data-id='"+item.id+"']").innerHTML = item.quantidade
}

Não consigo atualizar os elementos que já estão no HTML. Essa mudança é possível? como coloco todos os itens no Local Storage?

1 resposta

Olá Aline, tudo bem?

Pelo que entendi do seu código, você está adicionando novos elementos à lista e salvando esses elementos no Local Storage, mas não está conseguindo atualizar os elementos que já estão na lista. É isso mesmo?

Se for esse o caso, é possível sim atualizar os elementos que já estão no HTML. O que você precisa fazer é adicionar um identificador único para cada elemento na lista, para que você possa encontrá-lo posteriormente e atualizá-lo.

No seu código, você já está adicionando um identificador único para cada elemento criado na função criaElemento, que é o atributo data-id do elemento strong que contém a quantidade. Para atualizar um elemento, você pode buscar esse identificador único usando o método querySelector e, em seguida, atualizar o conteúdo desse elemento.

Para colocar todos os itens no Local Storage, você já está fazendo isso no seu código, na linha localStorage.setItem("itens", JSON.stringify(itens)). O que essa linha faz é transformar o array itens em uma string JSON e salvar essa string no Local Storage com a chave "itens".

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software