2
respostas

[Dúvida] Duvidas com funcoes no javascript

let livros = []
const livrosUl = document.getElementById('livros')
const categoria = document.querySelectorAll('[data-categoria]')
const precoID = document.getElementById('btnOrdenarPorPreco')
const dadoslivros = ("https://guilhermeonrails.github.io/casadocodigo/livros.json")
pegaDados()

async function pegaDados() {
    const dados = await fetch(dadoslivros)
    livros = await dados.json()
    constroiCard(descontoLivros(livros))
}

categoria.forEach(element => element.addEventListener('click', filtraCategoria))



function constroiCard(livros) {
    livrosUl.innerHTML = ''
    livros.forEach(element => {
        livrosUl.innerHTML +=
            `<div class="livro">
            <img class="livro__imagens" src="${element.imagem}" alt="${element.alt}" />
            <h2 class="livro__titulo">${element.titulo}</h2>
            <p class="livro__descricao">${element.autor}</p>
            <p class="livro__preco" id="preco">${element.preco}</p>
            <div class="tags">
                <span class="tag">${element.categoria}</span>
            </div>
        </div>`
    })
}

function filtraCategoria() {
    let categoriaValue = document.getElementById(this.id).value
    livrosFiltrados = livros.filter(livro => livro.categoria == categoriaValue)
    return constroiCard(livrosFiltrados)
}

function descontoLivros(livros) {
    const desconto = 0.5
    const livrosComDesconto = livros.map(livro => {
        return { ...livro, preco: livro.preco - (livro.preco * desconto) }
    })
    return livrosComDesconto
}

precoID.addEventListener('click', organizaPreco)
function organizaPreco() {
    let precosOrganizados = livros.sort((a, b) => a.preco - b.preco)
    constroiCard(precosOrganizados)
}

Meu site possui 3 botões para filtrar as categorias dos livros e 1 para os preços. O erro esta acontecendo na hora que vou aplicar o filtro de preco, ja que, quando clico no botao para aplicar esse filtro, ele consegue colocar os preços direito, mas aplica em todas as outras paginas. Queria corrigir o codigo para que quando apertasse o filtro de preço, aparecesse os livros filtrados apenas nessa pagina, e não nas paginas dos outros filtros

2 respostas

Olá Kaiky, tudo bem?

Pelo que entendi, você está tendo um problema com o filtro de preço em seu site. O filtro está aplicando os preços corretamente, mas está afetando todas as outras páginas. Para corrigir esse problema, você pode criar uma nova variável para armazenar os livros filtrados por preço e, em seguida, passar essa variável para a função constroiCard().

Para fazer isso, você pode modificar a função organizaPreco() para criar uma nova variável chamada livrosFiltradosPorPreco e armazenar nela os livros filtrados por preço. Em seguida, você pode chamar a função constroiCard() passando essa nova variável como parâmetro. Dessa forma, apenas os livros filtrados por preço serão exibidos na página atual.

Segue o código modificado:

function organizaPreco() {
    let livrosFiltradosPorPreco = livros.sort((a, b) => a.preco - b.preco)
    constroiCard(livrosFiltradosPorPreco)
}

É só uma ideia.

Espero ter ajudado e bons estudos!

Opa, tudo bem? entao, no codigo acima eu fiz isso, mas mesmo assim esta aplicando nas outras partes da pagina.