1
resposta

como trocar o innerHtml = "" por insertAdjacentHtml()

const $sectionLivros = document.querySelector('#livros')

function makeSecitonBook(listBooks) {
  $sectionLivros.innerHTML = ""
  // $sectionLivros.insertAdjacentHTML("beforeend", "")
  listBooks.forEach(elementLivro => {
    $sectionLivros.insertAdjacentHTML("beforeend", `
      <div class="livro">
        <img
          class=""
          src= ${elementLivro.imagem}
          alt= ${elementLivro.alt}
        />
        <h2 class="livro__titulo">
          ${elementLivro.titulo}
        </h2>
        <p class="livro__descricao">${elementLivro.autor}</p>
        <p class="livro__preco" id="preco">R$${elementLivro.preco.toFixed(2)}</p>
        <div class="tags">
          <span class="tag">${elementLivro.categoria}</span>
        </div>
      </div>
    `)
  })
};

esse codigo so funciona com o inner mas ele tem problemas de segurança, com o adjacent ele nao apaga o conteudo que tava antes

1 resposta

Oi, Osvaldo! Tudo bem?

Desculpa a demora por um retorno.

Apesar de ambas as funções manipularem o conteúdo HTML, utilizamos a propriedade innerHTML para definirmos todo o conteúdo dentro do elemento, que passa a ser igual ao novo valor, enquanto o método insertAdjacentHTML() é usado para inserir um conteúdo HTML em determinada posição do elemento.

Dessa forma, não é recomendado utilizar o método insertAdjacentHTML() para a aplicação desejada, que é substituir todo o conteúdo do elemento por um valor vazio e transformar, após isso, o conteúdo do elemento no conteúdo desejado. Podemos tomar tal conclusão, visto que, este método não é capaz de substituir todo o conteúdo do elemento por vazio, como o innerHTML, mas sim, apenas inserir/adicionar um novo conteúdo ao conteúdo já existente.

Espero ter ajudado na compreensão do problema!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓