document.addEventListener("DOMContentLoaded", () => { const container = document.getElementById("booksContainer"); const searchInput = document.getElementById("searchInput"); const categoryFilter = document.getElementById("categoryFilter"); let libros = []; // Cargar datos desde JSON fetch("data/libros.json") .then(res => res.json()) .then(data => { libros = data; renderBooks(libros); }); // Renderizar tarjetas function renderBooks(lista) { container.innerHTML = ""; if (lista.length === 0) { container.innerHTML = "

No se encontraron resultados.

"; return; } lista.forEach(libro => { const card = document.createElement("div"); card.className = "card"; card.innerHTML = ` Portada de ${libro.titulo}

${libro.titulo}

Autor: ${libro.autor}

Categoría: ${libro.categoria}

Leer / Descargar `; container.appendChild(card); }); } // Búsqueda en tiempo real searchInput.addEventListener("input", filtrar); categoryFilter.addEventListener("change", filtrar); function filtrar() { const texto = searchInput.value.toLowerCase(); const categoria = categoryFilter.value; const filtrados = libros.filter(libro => { const coincideTexto = libro.titulo.toLowerCase().includes(texto) || libro.autor.toLowerCase().includes(texto) || libro.categoria.toLowerCase().includes(texto); const coincideCategoria = categoria === "all" || libro.categoria === categoria; return coincideTexto && coincideCategoria; }); renderBooks(filtrados); } });