Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Criação de elemento com DOM em paginas diferentes

Gente vamos ao meu problema, eu estou tentando criar uma pagina de favoritos, portanto tanto a função criarItemLoja. Quanto a função criarItemPgFavoritos estão criando um elemento li e introduzindo na ulFavoritos (home) e ulFavoritosPgFavoritos (pagina de favoritos) respectivamente.

Essas paginas estão em arquivos html separados e nelas existem as ul's que capturei com querySelector.

Vamos as duvidas: Porque eu fiz duas funções que criam elementos? Eu tinha criado apenas uma, depois fiz um eventListener com evento de click no icone, salvei no localStorage os itens clicados e recuperei os itens em um arrVazio.

No console, tudo certo o arr esta la, esta atribuindo os objetos, certinho, porem, quando eu dava o forEach no novo objeto para renderizar a pagina os objetos que estavam no localStorage nao apareciam

Quebrei a cabeça e conclui que o problema devia estar na função e realmente o problema estava la, as funções são essas abaixo. A primeira cria a lista de elementos na pagina home e a segunda na pagina favoritas.

Ambas funcionam, o problema é: elas não funcionam simultaneamente, quando eu comento A renderiza B e vice e versa. Então por isso os itens não estão renderizando na minha pagina. Alguem consegue me explicar o motivo e me ajudar nessa?

function criarItemLoja(itens) {
    const li = document.createElement('li');
    const divLojaItem = document.createElement('div');
    divLojaItem.classList.add('favoritos-item');

const imgLojaIcon = document.createElement('img');
imgLojaIcon.id = 'loja__favoritos-icon';
imgLojaIcon.src = itens.icon;
imgLojaIcon.alt = 'Icone de favoritos';

const imgLivro = document.createElement('img');
imgLivro.src = itens.livro;
imgLivro.alt = 'Imagem do livro';

const buttonFavoritos = document.createElement('button');
buttonFavoritos.className = 'favoritos-button';

let imgButtonSacola = document.createElement('img');
imgButtonSacola.id = 'favoritos-button-sacola';
imgButtonSacola.src = './img/Compras.svg';
imgButtonSacola.alt = 'Ícone de sacola';

const precoTexto = document.createTextNode(itens.preco);

// Mostrar a estrutura do item, pega a div e coloca a imagem do icone e do livro

divLojaItem.appendChild(imgLojaIcon);
divLojaItem.appendChild(imgLivro);
//add a div a linha
li.appendChild(divLojaItem);

//faz o mesmo que o acima

buttonFavoritos.appendChild(imgButtonSacola);
buttonFavoritos.appendChild(precoTexto)
li.appendChild(buttonFavoritos);

//retorna o item pronto 

return li

  };
 



  //faz o loop de forma dinamica e coloca na tela
  itens.forEach(itens => {
    const itemFavoritos = criarItemLoja(itens);
    ulFavoritos.appendChild(itemFavoritos); 
}); 


function criarItemPgFavoritos(itens) {
  const li = document.createElement('li');
  const divLojaItem = document.createElement('div');
  divLojaItem.classList.add('favoritos-item');

  const imgLojaIcon = document.createElement('img');
  imgLojaIcon.id = 'loja__favoritos-icon';
  imgLojaIcon.src = itens.icon;
  imgLojaIcon.alt = 'Icone de favoritos';

  const imgLivro = document.createElement('img');
  imgLivro.src = itens.livro;
  imgLivro.alt = 'Imagem do livro';

  const buttonFavoritos = document.createElement('button');
  buttonFavoritos.className = 'favoritos-button';

  let imgButtonSacola = document.createElement('img');
  imgButtonSacola.id = 'favoritos-button-sacola';
  imgButtonSacola.src = './img/Compras.svg';
  imgButtonSacola.alt = 'Ícone de sacola';

  const precoTexto = document.createTextNode(itens.preco);

  // Mostrar a estrutura do item, pega a div e coloca a imagem do icone e do livro
  
  divLojaItem.appendChild(imgLojaIcon);
  divLojaItem.appendChild(imgLivro);
  
  //add a div a linha
  
  li.appendChild(divLojaItem);

  //faz o mesmo que o acima
  
  buttonFavoritos.appendChild(imgButtonSacola);
  buttonFavoritos.appendChild(precoTexto)
  li.appendChild(buttonFavoritos);

  //retorna o item pronto 
  
  return li

};

itens.forEach (itens => {
  const itensFavoritos = criarItemPgFavoritos(itens);
  ulFavoritosPgFavoritos.appendChild(itensFavoritos);
})
1 resposta
solução!

Olá Igor!

Parece que você está enfrentando um problema interessante aí. A primeira coisa que me vem à mente é que talvez haja um conflito entre as duas funções ao tentar adicionar elementos às respectivas listas (ulFavoritos e ulFavoritosPgFavoritos).

Quando você diz que "elas não funcionam simultaneamente", isso pode indicar que existe alguma interferência ou sobrescrita entre os elementos que estão sendo criados pelas duas funções.

Uma possível solução seria certificar-se de que você está utilizando diferentes identificadores ou classes para os elementos que estão sendo criados pelas duas funções. Isso evitaria conflitos e garantiria que cada função esteja adicionando seus elementos à lista correta.

Outra coisa a ser verificada é se as duas funções estão sendo chamadas no momento certo. Certifique-se de que o código que chama essas funções está sendo executado de maneira adequada nas duas páginas.

Além disso, ao usar querySelector para obter as listas (ulFavoritos e ulFavoritosPgFavoritos), certifique-se de que esses elementos estão sendo encontrados corretamente em ambas as páginas.

Se possível, compartilhe um pouco mais do código, especialmente a parte onde você está chamando essas funções e obtendo as listas. Assim, posso fornecer uma análise mais precisa.