<header>
<input class="mr-2" type="search" id="search" placeholder="Search by Name"/>
<select class="mr-2">
<option>All Members</option>
<option value="premium">Premium</option>
<option value="basic">Basic</option>
</select>
<select id="sort" class="">
<option>Sort:</option>
<option value="alphabetical">Alpabetical</option>
</select>
</header>
<div id="cards"></div>
* {
box-sizing: border-box;
}
body {
background-color: #ddd;
font-family: 'Tahoma', sans-serif;
}
header {
display: flex;
padding: 10px;
flex-wrap: wrap;
}
input, select, button {
padding: 10px;
border: none;
border-radius: 8px;
margin-block: 4px;
}
button {
background-color: tomato;
font-weight: bold;
color: white;
box-shadow: 5px 5px 5px rgb(000,000,000, .2);
cursor: pointer;
}
.mr-2 {
margin-right: 6px;
}
#cards {
display: flex;
flex-wrap: wrap;
}
.card {
background-color: white;
border-radius: 10px;
font-weight: bold;
padding:20px;
margin: 5px;
min-height: 150px;
min-width: 300px;
box-shadow: 10px 10px 10px rgb(000,000,000, .2);
border-left: 7px solid skyblue;
color: #333;
text-decoration: none;
}
.card.premium {
border-color: tomato;
}
const container = document.querySelector("#cards");
const search = document.querySelector("#search");
const select = document.querySelector("select");
const sort = document.querySelector("#sort");
const cards = [
{ name: "Miguel Fondeur", id: 1, premium: false, profileURL: "#" },
{ name: "Michael Denny", id: 2, premium: false, profileURL: "#" },
{ name: "Scott Endicott", id: 3, premium: true, profileURL: "#" },
{ name: "Bogdan Chayka", id: 4, premium: true, profileURL: "#" },
];
function renderCards(filteredCards = cards) {
container.innerHTML = filteredCards
.map(
(card) => `
<a href="${card.profileURL}" class="card ${card.premium ? "premium" : "basic"}">
${card.name}<br>id: ${card.id}
</a>`
)
.join("");
}
function filterCards() {
let filtered = cards;
const searchTerm = search.value.trim().toLowerCase();
if (searchTerm) {
filtered = filtered.filter((card) => card.name.toLowerCase().includes(searchTerm));
}
if (select.value === "premium") {
filtered = filtered.filter((card) => card.premium);
} else if (select.value === "basic") {
filtered = filtered.filter((card) => !card.premium);
}
if (sort.value === "alphabetical") {
filtered = filtered.toSorted((a, b) => a.name.localeCompare(b.name));
}
renderCards(filtered);
}
document.addEventListener("input", (event) => {
if (event.target.closest("#search, select, #sort")) {
filterCards();
}
});
renderCards();
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.