Naudokite „JavaScript“, kad rūšiuotumėte elementus pagal keletą dinaminių svetainių kategorijas

Naudokite „JavaScript“, kad rūšiuotumėte elementus pagal keletą dinaminių svetainių kategorijas
Naudokite „JavaScript“, kad rūšiuotumėte elementus pagal keletą dinaminių svetainių kategorijas

Produktų filtravimo tobulinimas naudojant „JavaScript“ ir kelias kategorijas

Kuriant dinamiškus, patogius tinklalapius reikia sklandžiai naršyti ir lengvai filtruoti turinį. Tai ypač naudinga, kai rodomi produktai ar prekės, patenkančios į kelias kategorijas. Naudodami „JavaScript“ galime įdiegti intuityvų būdą filtruoti elementus pagal kelias kategorijas, todėl vartotojams būtų lengviau rasti būtent tai, ko jie ieško.

Šiuo atveju, spustelėjus kategorijos mygtuką, puslapyje rodomi elementai turėtų būti filtruojami. Vartotojas turėtų turėti galimybę vienu metu pasirinkti kelias kategorijas, kad būtų galima labiau pritaikyti gaminių vaizdą. Pavyzdžiui, pasirinkus „Lašiša“ ir „Krevetės“, turėtų būti rodomi tik elementai, kuriuose yra abu ingredientai.

Šiuo metu daugelis diegimų puikiai tinka vienos kategorijos filtravimui, tačiau pridėti kelias kategorijas gali būti sudėtinga. Iššūkis yra užtikrinti, kad sprendžiant, kuriuos elementus rodyti ar slėpti, būtų atsižvelgta į visas pasirinktas kategorijas. Šiame straipsnyje nagrinėjama, kaip efektyviai išplėsti vienos kategorijos filtravimą į kelių kategorijų filtravimą naudojant JavaScript.

Šiame vadove apžvelgsime sprendimą, kuris dinamiškai filtruoja korteles pagal kelis aktyvius mygtukus, kad būtų lengviau ir patogiai naudotis. Įdiegę šį „JavaScript“ sprendimą, sužinosite, kaip pagerinti savo tinklalapio interaktyvumą ir padidinti vartotojų įtraukimą.

komandą Naudojimo pavyzdys
every() The every() method is used to check if all selected categories match the categories of each card. This is crucial in ensuring that multiple category filters work correctly. For example, activeCategories.every(cat =>Kiekvienas() metodas naudojamas patikrinti, ar visos pasirinktos kategorijos atitinka kiekvienos kortelės kategorijas. Tai labai svarbu norint užtikrinti, kad kelių kategorijų filtrai veiktų tinkamai. Pavyzdžiui, activeCategories.every(cat => cardCategories.includes(cat)) užtikrina, kad visos pasirinktos kategorijos būtų įtrauktos į kortelės kategorijas.
toggle() Ši komanda įjungia arba išjungia klasę. Jis naudojamas norint dinamiškai pridėti arba pašalinti aktyvaus mygtuko klasę iš kategorijos mygtuko spustelėjus. Tai padeda atsekti, ar mygtukas yra aktyvus ir turi įtakos rodomoms ar paslėptoms kortelėms.
filter() The filter() method creates a new array with all elements that pass a test. In the Node.js example, products.filter(product => selectedCategories.every(cat =>Filtro() metodas sukuria naują masyvą su visais elementais, kurie išlaiko testą. Node.js pavyzdyje products.filter(product => selectedCategories.every(cat => product.categories.includes(cat))) filtruoja produktus pagal vartotojo pasirinktas kategorijas.
split() Split() metodas naudojamas konvertuoti kategorijų eilutę į masyvą. Pavyzdžiui, card.getAttribute("data-category").split(",") padalija kableliais atskirtą kategorijų eilutę į masyvą, kad būtų lengviau palyginti su aktyviomis kategorijomis.
classList.add() Šis metodas prideda nurodytą klasę prie elemento. Jis naudojamas norint pridėti neaktyvių kortelių klasę, kad būtų paslėptos kortelės, kurios neatitinka aktyvių filtrų. Pavyzdžiui, card.classList.add("neaktyvi kortelė") paslepia kortelę, kai jos kategorijos neatitinka pasirinktų.
trim() Trim() metodas naudojamas tarpams pašalinti iš abiejų eilutės galų. Scenarijuje jis užtikrina, kad mygtukų kategorijos būtų aiškiai palygintos su kategorijomis iš produkto duomenų. Pavyzdžiui, button.innerText.trim() užtikrina, kad nebūtų atsižvelgiama į papildomus tarpus.
post() Užpakaliniame scenarijuje post() naudojamas sukurti maršrutą, kuris priima kliento siunčiamus duomenis (šiuo atveju pasirinktas kategorijas). Serverio scenarijus apdoroja šią užklausą, kad grąžintų filtruotus produkto duomenis pagal pasirinktas kategorijas.
json() Šis „Express“ metodas naudojamas siųsti JSON atsakymą atgal klientui. Pavyzdžiui, res.json(filteredProducts) grąžina produktus, atitinkančius pasirinktas kategorijas, todėl kliento pusė gali rodyti filtruotus produktus.

„JavaScript“ kelių kategorijų filtravimo supratimas

Aukščiau pateiktuose scenarijuose pagrindinis dėmesys skiriamas dinaminiam elementų filtravimui pagal kelias kategorijas, o tai būtina norint pagerinti vartotojų patirtį gaminiais pagrįstose svetainėse. Tikslas yra leisti vartotojams pasirinkti kelias kategorijas ir atitinkamai filtruoti korteles. Tai pasiekiama naudojant „JavaScript“, fiksuojant mygtukų paspaudimus, pasirinktas kategorijas išsaugant masyve ir rodont tik tas korteles, kurios atitinka visas pasirinktas kategorijas. Procesas pradedamas vartotojui spustelėjus kategorijos mygtuką, kuris perjungia aktyvią to mygtuko būseną. Mygtuko reikšmė saugoma masyve, kuris atspindi visus aktyvius filtrus.

Svarbi šio sprendimo dalis yra masyvo metodo naudojimas kiekvienas (). Ši komanda užtikrina, kad visos pasirinktos kategorijos būtų palygintos su kortelės kategorijomis. Ji patikrina, ar kiekviena aktyvi kategorija yra kortelės kategorijose, todėl kelių kategorijų filtravimas veikia sklandžiai. Kitas svarbus metodas yra padalinti (), kuris naudojamas kategorijų eilutei iš kiekvienos kortelės suskaidyti į masyvą. Tai leidžia „JavaScript“ palyginti atskiras kategorijas ir nustatyti, kurios kortelės turi būti rodomos arba paslėptos.

Be to, scenarijus naudoja classList.toggle() Norėdami pridėti arba pašalinti aktyvią klasę ant mygtukų spustelėjus. Ši klasė yra labai svarbi vizualiniam grįžtamajam ryšiui, nes ji rodo, kurie mygtukai šiuo metu yra aktyvūs. Kai mygtukas išjungiamas, jo kategorija pašalinama iš aktyvių kategorijų masyvo ir vėl suaktyvinama filtravimo funkcija, kad būtų atnaujintas ekranas. Kortelės, kurios neatitinka aktyvių kategorijų, yra paslėptos pridedant klasę, kad jos būtų pažymėtos kaip neaktyvios. Šis metodas užtikrina, kad vartotojai galėtų lengvai patikslinti paiešką pasirinkdami arba panaikindami kelių filtrų pasirinkimą.

Galinis scenarijus sukurtas taip, kad būtų galima apdoroti produkto filtravimą serverio pusėje naudojant Node.js ir Express. Pasirinktos kategorijos siunčiamos į serverį per POST užklausą, o serveris apdoroja šią užklausą filtruodamas produktus ir grąžindamas tik tas prekes, kurios atitinka aktyvias kategorijas. Serveris naudoja tą pačią logiką kaip ir priekinė dalis, naudodama filtras () būdas palyginti pasirinktas kategorijas su kiekvieno produkto kategorijomis. Šis metodas yra naudingas dirbant su dideliais duomenų rinkiniais, nes jis perkelia apdorojimą iš kliento pusės, todėl galutiniai vartotojai gali geriau dirbti.

Dinaminis elementų filtravimas naudojant „JavaScript“: optimizuotas kelių kategorijų filtravimas

Priekinis kūrimo metodas naudojant Vanilla JavaScript

// Define product data
let products = {
  data: [
    { productName: "Fantasy", category: "Salmon, Shrimp" },
    { productName: "Spring", category: "Veggie" },
    { productName: "Rainbow", category: "Salmon, Tuna, Unagi" },
    { productName: "Unique", category: "Salmon, Tuna, Unagi, Shrimp" },
    { productName: "Perfection", category: "Salmon" },
  ]
};

// Handle button click event
let activeCategories = [];
document.querySelectorAll(".category-button").forEach(button => {
  button.addEventListener("click", () => {
    const category = button.innerText.trim();
    button.classList.toggle("active-button");
    if (button.classList.contains("active-button")) {
      activeCategories.push(category);
    } else {
      activeCategories = activeCategories.filter(cat => cat !== category);
    }
    filterCards();
  });
});

// Filter cards based on active categories
function filterCards() {
  document.querySelectorAll(".card").forEach(card => {
    const cardCategories = card.getAttribute("data-category").split(",");
    const match = activeCategories.every(cat => cardCategories.includes(cat));
    card.style.display = match ? "block" : "none";
  });
}

Dinaminio elementų filtravimo fono diegimas

Serverio pusės metodas naudojant Node.js ir Express

const express = require('express');
const app = express();
app.use(express.json());

// Sample product data
const products = [
  { name: 'Fantasy', categories: ['Salmon', 'Shrimp'] },
  { name: 'Spring', categories: ['Veggie'] },
];

// Filter products API
app.post('/filter', (req, res) => {
  const selectedCategories = req.body.categories;
  const filteredProducts = products.filter(product =>
    selectedCategories.every(cat => product.categories.includes(cat))
  );
  res.json(filteredProducts);
});

app.listen(3000, () => console.log('Server running on port 3000'));

Pažangūs kelių kategorijų filtravimo būdai interneto kūrimo srityje

Diegiant kelių kategorijų filtravimo sistemą JavaScript, svarbu atsižvelgti ne tik į vartotojo sąsajos sąveiką, bet ir į ją palaikančią duomenų struktūrą. Dinamiško turinio kontekste išlaikomas optimizuotas ir švarus DOM Svarbiausia yra manipuliavimo strategija. Pavyzdžiui, galite naudoti įvykių delegavimo metodus, kad galėtumėte efektyviai valdyti kelis kategorijų mygtukus ir užtikrinti, kad būtų manipuliuojami tik reikalingi DOM elementai.

Vienas aspektas, galintis dar labiau pagerinti filtravimo patirtį, yra sudėtingesnių vartotojo sąsajos elementų, pvz., žymimųjų laukelių arba kelių pasirinkimų išskleidžiamųjų meniu, pridėjimas vietoj paprastų mygtukų. Tai leidžia vartotojams detaliau sąveikauti su filtrais. Pavyzdžiui, išskleidžiamasis meniu, leidžiantis pasirinkti kelis kartus, suteikia aiškesnę vartotojo sąsają ir daugiau lankstumo renkantis kategorijas. Tai gali būti įgyvendinta naudojant papildomą „JavaScript“ logiką ir stilių, kartu naudojant masyvo metodus, pvz filter() ir every() kategorijų palyginimui.

Kitas svarbus aspektas yra filtravimo sistemos veikimas, ypač kai kalbama apie didelį duomenų rinkinį. Kai turite šimtus ar tūkstančius elementų, kuriuos norite filtruoti, labai svarbu kiek įmanoma sumažinti manipuliavimą DOM. Vienas iš būdų tai optimizuoti yra DOM naujinimų paketas naudojant requestAnimationFrame() arba debounce() metodus, kaip kontroliuoti naujinimų dažnį ir užtikrinti sklandžią vartotojo patirtį. Šie metodai ne tik pagerina našumą, bet ir padidina puslapio reagavimą, todėl jį galima keisti didesniems duomenų rinkiniams.

Dažnai užduodami klausimai apie kelių kategorijų filtravimą „JavaScript“.

  1. Kaip tvarkyti kelis aktyvius filtrus?
  2. Aktyvius filtrus galite saugoti masyve ir naudoti every() norėdami patikrinti, ar kiekvienos kortelės kategorija atitinka pasirinktus filtrus.
  3. Kas atsitiks, jei kategorijos persidengia?
  4. Naudojant split() ir trim(), galite atskirti ir išvalyti kategorijų duomenis, užtikrindami, kad kiekviena kategorija būtų tinkamai palyginta su aktyviais filtrais.
  5. Kaip galiu optimizuoti didelių duomenų rinkinių filtravimą?
  6. DOM naujinimų paketas naudojant requestAnimationFrame() arba įgyvendinti a debounce() funkcija, skirta sumažinti filtravimo operacijų dažnį ir pagerinti našumą.
  7. Kaip rodyti elementus, atitinkančius visas pasirinktas kategorijas?
  8. Naudokite every() kad visos pasirinktos kategorijos būtų įtrauktos į kiekvienos kortelės duomenis, prieš padarydami jas matomas.
  9. Koks yra geriausias būdas tvarkyti sugadintus vaizdus kortelių sistemoje?
  10. Įgyvendinti an error įvykių klausytojas kiekviename vaizde, kad paslėptumėte arba pakeistumėte vaizdą, kai jo nepavyksta įkelti, taip pagerinant vartotojo patirtį.

Paskutinės mintys apie „JavaScript“ filtravimo būdus

Tinklalapiuose įdiegus kelių kategorijų filtravimą galima žymiai pagerinti vartotojo patirtį, todėl vartotojams bus lengviau rasti būtent tai, ko jiems reikia. Kruopščiai naudojant JavaScript metodai, tokie kaip perjungti () ir kiekvienas (), kūrėjai gali sukurti efektyvų, keičiamo dydžio sprendimą, kuris sklandžiai tvarko didelius duomenų rinkinius.

Be to, optimizuojant DOM manipuliavimą ir sumažinant nereikalingas operacijas, šis metodas užtikrina našumą net ir esant intensyviai vartotojo sąveikai. Šią filtravimo sistemą galima integruoti į elektroninės prekybos svetaines, aplankus ar bet kurį puslapį, kuriame reikalingas dinaminis turinio atvaizdavimas, pagrįstas keliais filtrais.

Šaltinių ir nuorodų skyrius
  1. Šio straipsnio turinį ir kodo pavyzdžius įkvėpė Alenos Chuyankovos „CodePen“ pavyzdys. Originalų kodą galite ištirti čia: Alenos „Code Pen“. .
  2. Papildomos „JavaScript“ masyvo metodų ir įvykių tvarkymo koncepcijos buvo pateiktos oficialioje „Mozilla Developer Network“ dokumentacijoje, pasiekiamoje čia: MDN žiniatinklio dokumentai .
  3. Norėdami gauti daugiau įžvalgų apie DOM manipuliavimo ir našumo optimizavimą naudojant „JavaScript“, pateikiau šį išsamų „Smashing Magazine“ vadovą: Efektyvaus DOM supratimas .