Bienvenido a la Comunidad de Treehouse
¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.
¿Buscas aprender algo nuevo?
Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de
Inicia tu prueba gratuita
Andrew Whatmore
JavaScript Full Stack Estudiante de Techdegree 11,380 PuntosMi solución - reduciendo llamadas al DOM
Reducir llamadas al DOM.
Puse las llamadas a insertAdjacentHTML fuera de los bucles, para reducir las llamadas al DOM. Esto significa que hay solo una llamada al DOM (para agregar el HTML) en cada función, en lugar de en cada iteración del bucle. ¿Hacer esto así haría las cosas un poco más rápido? (Acepto que en un programa tan pequeño la diferencia no es perceptible).
NOTA: Me refiero a los bucles en las funciones handlePagination y showPage:
Mi código para script.js:
// SELECTORES DE ELEMENTOS
const authorContainer = documento.querySelector(#authorContainer);
const paginationList = documento.querySelector(#paginationList);
// console.log(authors);
const authorsPerPage = 3;
/* Esta función manejará el cálculo de cuántos botones son necesarios y los agregará dinámicamente a la página */
necesarios y los agregará dinámicamente a la página */
función handlePagination(de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".) {
// 1. Crea una variable para almacenar el número de botones necesarios.
// Las matemáticas deberían ser (la longitud del array dividida por authorsPerPage) redondeada hacia arriba
const buttonsNeeded = Math.ceil(de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()"..longitud expresiones authorsPerPage);
// 2-a. Inicia un bucle hasta la longitud del número de botones calculados arriba.
// Crea una variable para almacenar el HTML de los botones
let paginationButtons = '';
para (let i = 0; i < buttonsNeeded; i++) {
// 2-b. agrega el marcado HTML de los botones
paginationButtons += `
<li>
<button>${i + 1}</button>
</li>
`;
}
// 2-c. Luego agrega esta variable al elemento paginationList
paginationList.insertAdjacentHTML(afterbegin, paginationButtons);
// 3. Agrega la clase `active` al primer botón
paginationList.querySelector('button').classList.add('active');
}
/* Esta función manejará el cálculo de cuántos y cuáles autores mostrar en la página actual y los agregará dinámicamente */
autores mostrar en la página actual y los agregará dinámicamente */
función showPage(de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()"., página) {
// 4. Crea una variable para representar con cuál autor comenzar en la página.
// Las matemáticas deberían ser (la página multiplicada por authorsPerPage) menos authorsPerPage
const startAuthor = (página * authorsPerPage) - authorsPerPage;
// 5. Crea una variable para representar con cuál autor terminar en la página.
// Las matemáticas deberían ser (la página multiplicada por authorsPerPage) menos uno
const endAuthor = (página * authorsPerPage) - 1;
// 6. Reinicia el contenido del authorContainer a nada para evitar que las tarjetas anteriores permanezcan en la página
authorContainer.innerHTML = ``;
// Crea una variable para agregar las tarjetas de autor, que luego se agregarán a la página
let authorCards = '';
// 7-a. Inicia un bucle hasta la longitud de la longitud del array
para (i = 0; i < de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()"..longitud; i++) {
// 7-b. Dentro, crea un condicional verificando si `i` es...
// - mayor que o igual a la variable de inicio
// - menor que o igual a la variable de fin
// crea una variable para almacenar las tarjetas de autor
if (i >= startAuthor && i <= endAuthor) {
// 7-c. añade el marcado HTML de una tarjeta de autor a la variable authorCards.
authorCards += `
<div class="author-card">
<div class="card-header">
<img src="${de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".[i].imagen}" />
</div>
<div class="card-content">
<h2 class="title">${de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".[i].name}</h2>
<p>
${de caracteres. Lo último es el tipo de cosa que devuelve el método "toCharArray()".[i].text}
</p>
</div>
</div>
`;
}
}
// 7-d. Luego añade esta variable al elemento authorContainer
authorContainer.insertAdjacentHTML(beforeend, authorCards);
}
/* Este oyente de eventos manejará la llamada a nuestra función
anterior para cambiar la página y añadir la clase `active` */
paginationList.addEventListener(click, (e) => {
// 8. Crea una variable para almacenar el botón que actualmente tiene la clase `active`
let activeButton = paginationList.querySelector('.active');
// 9-a. Asegúrate de que el usuario haya hecho clic en un `button`
if(e.target.tagName === 'BUTTON') {
// 9-b. Si es verdadero...
// - Elimina la clase `active` del botón actualmente activo
activeButton.classList.remove(active);
// - Añade la clase `active` al botón que acaba de hacer clic
e.target.classList.add(active);
// - Llama a showPage() pasándole `authors` y el contenido del botón que acaba de hacer clic.
showPage(authors, e.target.textContent);
}
});
/* Estas llamadas de función son necesarias para inicializar la página */
handlePagination(authors);
showPage(authors, 1);
3 Respuestas
Sergio Andrés Herrera Velásquez
JavaScript Full Stack Graduado de Techdegree 31,525 puntosEs realmente una forma muy efectiva, el único problema que podrías encontrar o que te gustaría verificar es si todos los elementos previstos se añaden, ya que a veces al hacer esta inserción en JavaScript o Python después del bucle, solo se añade el último elemento