Как сделать весь вывод одной функцией?
Есть скрипт, который загружает массив из api и выводит информацию в виде товаров в магазине. Есть кнопки сортировки, на которых висит обработчик событий, выводящий отсортированный список.
Как сделать весь вывод одной функцией? Потому что один и тот же код повторяется 3 раза.
Код выглядит так:
const marketURL = "https://fakestoreapi.com/products";
let stuff = await fetch(marketURL);
stuff = await stuff.json();
marketPlace.innerHTML = stuff.map(item => `
<div id="mainCard" class="card m-2 shadow p-3 mb-5 bg-white rounded">
<img src="${item.image}" class="mx-auto card-img-top" title="${item.title}">
<div class="card-body">
<h5 class="card-title text-center">${item.title}</h5>
<p class="card-text descript">${item.description}</p>
<h4 class="text-end">$${item.price}</h4>
</div>
</div>
`).join("");
lowerP.addEventListener("click", function(){
stuff.sort((a,b) => a.price > b.price ? 1 : -1);
marketPlace.innerHTML = stuff.map(item => `
<div id="mainCard" class="card m-2 shadow p-3 mb-5 bg-white rounded">
<img src="${item.image}" class="mx-auto card-img-top" title="${item.title}">
<div class="card-body">
<h5 class="card-title text-center">${item.title}</h5>
<p class="card-text descript">${item.description}</p>
<h4 class="text-end">$${item.price}</h4>
</div>
</div>
`).join("");
});
higherP.addEventListener("click", function(){
stuff.sort((a,b) => a.price < b.price ? 1 : -1);
marketPlace.innerHTML = stuff.map(item => `
<div id="mainCard" class="card m-2 shadow p-3 mb-5 bg-white rounded">
<img src="${item.image}" class="mx-auto card-img-top" title="${item.title}">
<div class="card-body">
<h5 class="card-title text-center">${item.title}</h5>
<p class="card-text descript">${item.description}</p>
<h4 class="text-end">$${item.price}</h4>
</div>
</div>
`).join("");
})
Ответы (1 шт):
Автор решения: Darth
→ Ссылка
const marketURL = "https://fakestoreapi.com/products";
let stuff = await fetch(marketURL);
stuff = await stuff.json();
// Искомая функция
function printHtml() {
marketPlace.innerHTML = stuff.map(item => `
<div id="mainCard" class="card m-2 shadow p-3 mb-5 bg-white rounded">
<img src="${item.image}" class="mx-auto card-img-top" title="${item.title}">
<div class="card-body">
<h5 class="card-title text-center">${item.title}</h5>
<p class="card-text descript">${item.description}</p>
<h4 class="text-end">$${item.price}</h4>
</div>
</div>
`).join("");
}
// Первый вывод
printHtml();
lowerP.addEventListener("click", function(){
stuff.sort((a,b) => a.price > b.price ? 1 : -1);
// Просто её вызываем
printHtml();
});
higherP.addEventListener("click", function(){
stuff.sort((a,b) => a.price < b.price ? 1 : -1);
// Просто её вызываем
printHtml();
})