Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Categoria livros disponiveis não esta exibindo na página

Na categoria de livros disponíveis não esta exibindo na página, se alguem conseguir me ajudar agradeço

// Meu código

const botoes = document.querySelectorAll('.btn')
botoes.forEach(btn => btn.addEventListener('click', filtrarLivros))

function filtrarLivros() {
    const elementoBtn = document.getElementById(this.id)
    const categoria = elementoBtn.value
    let livrosFiltrados = categoria == 'disponivel' ? filtrarPorDisponibilidade(categoria) : filtrarPorCategoria(categoria)
    exibirLivrosNaPagina(livrosFiltrados)
    if (categoria == 'disponivel') {
        const valorTotal = calcularValorTotalDeLivrosDisponiveis(livrosFiltrados)
        exibirValorTotalDosLivrosNaPagina(valorTotal)
    }
}

function filtrarPorCategoria(categoria) {
    return livros.filter(livro => livro.categoria == categoria)
}

function filtrarPorDisponibilidade() {
    return livros.filter(livro => livro.quantidade > 0)
}

function exibirValorTotalDosLivrosNaPagina() {
    elementoValorTotalDosLivrosDisponiveis.innerHTML = `
    <div class="livros__disponiveis">
    <p>Todos os livros disponíveis por R$ <span id="valor">299,00</span></p>
  </div>
    `
}
3 respostas

Olá Jean!

Realizando testes com o código mencionado, a filtragem não funcionou como esperado, nem mesmo para outras categorias, o meu projeto base é o do professor, ao chamar os IDs ou classes diferentes, da do instrutor podemos obter resultados diferentes, peço que por gentiliza ofereça mais informações a respeito do código utilizado principalmente do seu HTML e do arquivo metodforeach.js, se possível o projeto completo, deste modo consigo lhe auxiliar de forma mais assertiva.

Reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

// HTML DA PÁGINA

<header class="cabecalho">
  <div class="container">
      <input type="checkbox" id="menu" class="container__botao">
      <label for="menu" class="container__rotulo">
          <span class="cabecalho__menu-hamburguer container__imagem"></span>
      </label>
      <ul class="lista-menu">
          <li class="lista-menu__titulo">Categorias</li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Programação</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Front-end</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Infraestrutura</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Business</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Design & UX</a>
          </li>
      </ul>
      <img class="container__imagem" src="./assets/img/Logo.svg" alt="Logo da AluraBooks">
     <a class="link-logo" href="./index.html"> <h1 class="container__titulo"><b class="container__titulo--negrito">Alura</b>Books</h1></a>
  </div>

  <ul class="opcoes">
      <input type="checkbox" id="opcoes-menu" class="opcoes__botao">
      <label for="opcoes-menu" class="opcoes__rotulo">
          <li class="opcoes__item">Categorias</li>
      </label>

      <ul class="lista-menu">
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Programação</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Front-end</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Infraestrutura</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Business</a>
          </li>
          <li class="lista-menu__item">
              <a href="#" class="lista-menu__link">Design & UX</a>
          </li>
      </ul>

      <li class="opcoes__item"><a href="#" class="opcoes__link">Favoritos</a></li>
      <li class="opcoes__item"><a href="#" class="opcoes__link">Minha estante</a></li>
  </ul>

  <div class="container">
      <a href="./index.html" class="btn-cadastro">Início</a>
      <a href="#"><img class="container__imagem container__imagem-transparente" src="./assets/img/Favoritos.svg"
              alt="Meus Favoritos"></a>
      <a href="./loja.html" class="container__link"><img class="container__imagem" src="./assets/img/Compras.svg"
              alt="Carrinhos de Compras">
          <p class="container__texto">Minha Sacola</p>
      </a>
      <a href="#" class="container__link"><img class="container__imagem" src="./assets/img/Usuário.svg"
              alt="Meu perfil">
          <p class="container__texto">Meu Perfil</p>
      </a>
  </div>
</header>

<body>
  <section class="loja__banner"></section>
  <nav class="wrap">
    <ul class="nav">
      <li><button class="btn btn-front" href="#" id="btnFiltrarLivrosFront" value="front-end">LIVROS DE
          FRONT-END</button>
      </li>
      <li><button class="btn btn-back" href="#" id="btnFiltrarLivrosBack" value="back-end">LIVROS DE BACK-END</button>
      </li>
      <li><button class="btn btn-dados" href="#" id="btnFiltrarLivrosDados" value="dados">LIVROS DE DADOS</button></li>
      <li><button class="btn btn-disponiveis" href="#" id="btnLivrosDisponiveis">LIVROS DISPONÍVEIS</button></li>
      <li><button class="btn btn-ordenacao" href="#" id="btnOrdenarPorPreco">ORDENAR POR PREÇO</button></li>
    </ul>
  </nav>
  <section class="livros wrap" id="livros">
            // código omitido
  </section>
  <section id="valor_total_livros_disponiveis">
    <div class="livros__disponiveis">
      <p>Todos os livros disponíveis por R$ <span id="valor">299,00</span></p>
    </div>
  </section>

  <footer class="rodape_loja">
    <p>AluraBooks</p>
  </footer>

  <script src="./assets/js/loja.js"></script>
  <script src="./assets/js/metodoForEach.js"></script>
  <script src="./assets/js/metodoMap.js"></script>
  <script src="./assets/js/metodoFilter.js"></script>
  <script src="./assets/js/metodoSort.js"></script>
  <script src="./assets/js/metodoReduce.js"></script>
</body>

</html>
solução!

Olá Jean, tudo bem?

O erro acontece por um pequeno detalhe no seu HTML falta o value = disponivel no botão de livros disponiveis, ao colocar esse atributo o erro é reparado e a listagem funciona normalmente, seu código fica assim:

<section class="loja__banner"></section>
  <nav class="wrap">
    <ul class="nav">
      <li><button class="btn btn-front" href="#" id="btnFiltrarLivrosFront" value="front-end">LIVROS DE
          FRONT-END</button>
      </li>
      <li><button class="btn btn-back" href="#" id="btnFiltrarLivrosBack" value="back-end">LIVROS DE BACK-END</button>
      </li>
      <li><button class="btn btn-dados" href="#" id="btnFiltrarLivrosDados" value="dados">LIVROS DE DADOS</button></li>
      <li><button class="btn btn-disponiveis" href="#" id="btnLivrosDisponiveis" value="disponivel">LIVROS DISPONÍVEIS</button></li>
      <li><button class="btn btn-ordenacao" href="#" id="btnOrdenarPorPreco">ORDENAR POR PREÇO</button></li>
    </ul>
  </nav>
  <section class="livros wrap" id="livros">

Espero ter ajudado, qualquer dúvida, me coloco à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!