Használjon JavaScriptet az elemek több kategória szerinti rendezéséhez dinamikus webhelyekhez

Használjon JavaScriptet az elemek több kategória szerinti rendezéséhez dinamikus webhelyekhez
Használjon JavaScriptet az elemek több kategória szerinti rendezéséhez dinamikus webhelyekhez

Termékszűrés javítása JavaScript és több kategória segítségével

A dinamikus, felhasználóbarát weboldalak létrehozása magában foglalja a zökkenőmentes navigációt és a tartalom egyszerű szűrését. Ez különösen akkor hasznos, ha több kategóriába tartozó termékeket vagy tételeket jelenít meg. A JavaScript használatával intuitív módon tudunk több kategória alapján szűrni az elemeket, így a felhasználók könnyebben megtalálhatják pontosan azt, amit keresnek.

Ebben a forgatókönyvben a kategória gombra kattintva ki kell szűrni az oldalon megjelenő elemeket. A felhasználónak képesnek kell lennie több kategória egyidejű kiválasztására, lehetővé téve a termékek testreszabottabb megtekintését. Például a „Lazac” és a „Shrimp” kiválasztásával csak a mindkét összetevőt tartalmazó tételek jelennek meg.

Jelenleg sok megvalósítás jól működik az egykategóriás szűréshez, de több kategória hozzáadása bonyolult lehet. A kihívás abban rejlik, hogy az összes kiválasztott kategóriát figyelembe vegyék a megjelenítendő vagy elrejteni elemek kiválasztásakor. Ez a cikk azt mutatja be, hogyan lehet hatékonyan kiterjeszteni az egykategóriás szűrést többkategóriás szűrésre JavaScript használatával.

Ebben az útmutatóban egy olyan megoldást mutatunk be, amely dinamikusan szűri a kártyákat több aktív gomb alapján, egyszerű és felhasználóbarát élményt biztosítva. Ennek a JavaScript-megoldásnak a megvalósításával megtudhatja, hogyan javíthatja weboldala interaktivitását és fokozhatja a felhasználói elköteleződést.

Parancs Használati példa
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 =>Az every() metódus annak ellenőrzésére szolgál, hogy az összes kiválasztott kategória megfelel-e az egyes kártyák kategóriáinak. Ez döntő fontosságú annak biztosításában, hogy több kategóriaszűrő megfelelően működjön. Például az activeCategories.every(cat => cardCategories.includes(cat)) biztosítja, hogy az összes kiválasztott kategória szerepeljen a kártya kategóriáiban.
toggle() Ez a parancs be- vagy kikapcsol egy osztályt. Arra használják, hogy dinamikusan hozzáadják vagy eltávolítsák az aktív gombos osztályt egy kategóriagombból, amikor rákattint. Ez segít nyomon követni, hogy egy gomb aktív-e, és ez befolyásolja, hogy mely kártyák jelenjenek meg vagy elrejtve.
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 =>A filter() metódus létrehoz egy új tömböt minden olyan elemmel, amely megfelel a tesztnek. A Node.js példában a products.filter(product => selectedCategories.every(cat => product.categories.includes(cat))) szűri a termékeket a felhasználó által kiválasztott kategóriák alapján.
split() A split() metódus kategóriákból álló karakterlánc tömbbé alakítására szolgál. Például a card.getAttribute("data-category").split(",") a vesszővel elválasztott kategória karakterláncot egy tömbre bontja az aktív kategóriákkal való könnyebb összehasonlítás érdekében.
classList.add() Ez a metódus egy adott osztályt ad hozzá egy elemhez. Az inaktív kártya osztály hozzáadására szolgál az aktív szűrőknek nem megfelelő kártyák elrejtésére. Például a card.classList.add("inactive-card") elrejti a kártyát, ha a kategóriái nem egyeznek a kiválasztottakkal.
trim() A trim() metódus a szóközök eltávolítására szolgál a karakterlánc mindkét végén. A szkriptben biztosítja, hogy a gombok kategóriái egyértelműen összehasonlításra kerülnek a termékadatok kategóriáival. Például a button.innerText.trim() biztosítja, hogy a rendszer ne vegye figyelembe a felesleges szóközöket.
post() A háttérszkriptben a post() egy olyan útvonal létrehozására szolgál, amely elfogadja a kliens által küldött adatokat (jelen esetben a kiválasztott kategóriákat). A szerveroldali szkript feldolgozza ezt a kérést, hogy a kiválasztott kategóriák alapján visszaadja a szűrt termékadatokat.
json() Ez a módszer az Expressben JSON-válasz visszaküldésére szolgál az ügyfélnek. Például a res.json(filteredProducts) a kiválasztott kategóriáknak megfelelő termékeket adja vissza, lehetővé téve az ügyféloldal számára a szűrt termékek megjelenítését.

A több kategóriás szűrés megértése JavaScriptben

A fent megadott szkriptek az elemek több kategória alapján történő dinamikus szűrésére összpontosítanak, ami elengedhetetlen a termékalapú webhelyek felhasználói élményének javításához. A cél az, hogy a felhasználók több kategóriát válasszanak ki, és ennek megfelelően szűrjék a kártyákat. Ezt JavaScript használatával érik el a gombkattintások rögzítésével, a kiválasztott kategóriák tömbben való tárolásával, majd csak az összes kiválasztott kategóriának megfelelő kártyák megjelenítésével. A folyamat akkor indul el, amikor a felhasználó rákattint egy kategóriagombra, amely átkapcsolja az adott gomb aktív állapotát. A gomb értéke egy tömbben tárolódik, amely az összes aktív szűrőt reprezentálja.

Ennek a megoldásnak egy kritikus része a tömbmódszer használata minden(). Ez a parancs biztosítja, hogy az összes kiválasztott kategóriát összehasonlítsák a kártya kategóriáival. Ellenőrzi, hogy minden aktív kategória megtalálható-e a kártya kategóriái között, így lehetővé teszi a többkategóriás szűrés zökkenőmentes működését. Egy másik fontos módszer az hasított(), amely az egyes kártyák kategóriáinak tömbbe bontására szolgál. Ez lehetővé teszi a JavaScript számára, hogy összehasonlítsa az egyes kategóriákat, és meghatározza, mely kártyákat jelenítse meg vagy rejtse el.

Ezen kívül a script használ classList.toggle() az aktív osztály hozzáadásához vagy eltávolításához a gombokon kattintáskor. Ez az osztály kulcsfontosságú a vizuális visszajelzések szempontjából, mivel jelzi, hogy mely gombok vannak jelenleg aktívak. Egy gomb deaktiválásakor a kategóriája törlődik az aktív kategóriák tömbjéből, és a szűrési funkció ismét aktiválódik a kijelző frissítéséhez. Az aktív kategóriáknak nem megfelelő kártyák elrejthetők egy osztály hozzáadásával, amely inaktívként jelöli meg őket. Ez a módszer biztosítja, hogy a felhasználók egyszerűen finomíthassák keresésüket több szűrő kiválasztásával vagy kijelölésének megszüntetésével.

A háttérszkript úgy van kialakítva, hogy a Node.js és az Express használatával kezelje a kiszolgálóoldali termékszűrést. A kiválasztott kategóriákat POST kéréssel küldi el a szerver, a szerver pedig úgy dolgozza fel ezt a kérést, hogy kiszűri a termékeket, és csak az aktív kategóriáknak megfelelő tételeket adja vissza. A szerver ugyanazt a logikát használja, mint a front-end, a szűrő() módszer a kiválasztott kategóriák és az egyes termékek kategóriáinak összehasonlítására. Ez a megközelítés nagy adathalmazok kezelésekor hasznos, mivel leterheli a feldolgozást az ügyféloldalról, ami jobb teljesítményt eredményez a végfelhasználók számára.

Dinamikus elemszűrés JavaScript használatával: Optimalizált több kategóriás szűrés

Front-end fejlesztési megközelítés Vanilla JavaScript használatával

// 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";
  });
}

Háttérrendszer megvalósítása dinamikus elemszűréshez

Szerveroldali megközelítés Node.js és Express használatával

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'));

Fejlett technikák több kategóriás szűréshez a webfejlesztésben

Több kategóriás szűrőrendszer bevezetésekor JavaScript, fontos, hogy ne csak a felhasználói felület interakcióját vegyük figyelembe, hanem az azt támogató adatstruktúrát is. A dinamikus tartalommal összefüggésben az optimalizált és tiszta tartalom fenntartása DOM kulcsfontosságú a manipulációs stratégia. Például esemény-delegálási technikák segítségével több kategóriagombot is hatékonyan kezelhet, biztosítva, hogy csak a szükséges DOM-elemek legyenek manipulálva.

Az egyik szempont, amely tovább javíthatja a szűrési élményt, az egyszerű gombok helyett kifinomultabb UI-elemek, például jelölőnégyzetek vagy többszörös kijelölésű legördülő menük hozzáadása. Ez lehetővé teszi a felhasználók számára, hogy részletesebben kezeljék a szűrőket. Például a többszörös kijelölést lehetővé tevő legördülő menü letisztultabb felhasználói felületet és nagyobb rugalmasságot biztosít a felhasználók számára a kategóriák kiválasztásakor. Ez megvalósítható további JavaScript logikával és stílussal, miközben továbbra is használnak tömbmódszereket, mint pl filter() és every() kategória összehasonlításhoz.

Egy másik kritikus szempont a szűrőrendszer teljesítménye, különösen nagy adathalmaz esetén. Ha több száz vagy több ezer elemet kell szűrni, kulcsfontosságú, hogy a lehető legkisebbre csökkentse a DOM-manipulációt. Ennek optimalizálásának egyik módja a frissítések kötegelése a DOM-hoz, a használatával requestAnimationFrame() vagy debounce() módszerek a frissítések gyakoriságának szabályozására és a zökkenőmentes felhasználói élmény biztosítására. Ezek a technikák nemcsak a teljesítményt javítják, hanem az oldal reagálóképességét is, így nagyobb adathalmazokhoz is méretezhetőbbé válik.

Gyakran ismételt kérdések a JavaScript többkategóriás szűrésével kapcsolatban

  1. Hogyan kezelhetek több aktív szűrőt?
  2. Az aktív szűrőket tömbben tárolhatja és használhatja every() annak ellenőrzésére, hogy az egyes kártyák kategóriái megfelelnek-e a kiválasztott szűrőknek.
  3. Mi történik, ha átfedő kategóriáim vannak?
  4. Használata split() és trim(), elválaszthatja és megtisztíthatja a kategóriaadatokat, biztosítva, hogy minden kategória megfelelően össze legyen hasonlítva az aktív szűrőkkel.
  5. Hogyan optimalizálhatom a szűrést nagy adathalmazokhoz?
  6. Kötegelt DOM-frissítések használatával requestAnimationFrame() vagy megvalósítani a debounce() funkció csökkenti a szűrési műveletek gyakoriságát, javítva a teljesítményt.
  7. Hogyan jeleníthetek meg olyan elemeket, amelyek megfelelnek az összes kiválasztott kategóriának?
  8. Használat every() annak biztosítása érdekében, hogy az összes kiválasztott kategória szerepeljen az egyes kártyák adataiban, mielőtt azokat láthatóvá tenné.
  9. Mi a legjobb módja a törött képek kezelésének a kártyarendszerben?
  10. Végezzen el egy error eseményfigyelő minden egyes képen, hogy elrejtse vagy lecserélje a képet, ha nem sikerül betölteni, javítva a felhasználói élményt.

Utolsó gondolatok a JavaScript szűrési technikákról

A több kategóriás szűrés megvalósítása a weboldalakon jelentősen javíthatja a felhasználói élményt, így a felhasználók könnyebben megtalálhatják pontosan azt, amire szükségük van. Óvatos használat mellett JavaScript módszerek, mint pl toggle() és minden(), a fejlesztők hatékony, méretezhető megoldást hozhatnak létre, amely zökkenőmentesen kezeli a nagy adatkészleteket.

Sőt, a DOM-kezelés optimalizálásával és a szükségtelen műveletek csökkentésével ez a megközelítés még magas felhasználói interakció mellett is biztosítja a teljesítményt. Ez a szűrőrendszer integrálható e-kereskedelmi webhelyekbe, portfóliókba, vagy bármely olyan oldalba, amely több szűrőn alapuló dinamikus tartalommegjelenítést igényel.

Forrás és hivatkozás szakasz
  1. A cikk tartalmát és kódpéldáit Alena Chuyankova CodePen példája ihlette. Az eredeti kódot itt tekintheti meg: Alena CodePen .
  2. A JavaScript tömb metódusaival és az eseménykezeléssel kapcsolatos további koncepciókra hivatkoztunk a hivatalos Mozilla Developer Network dokumentációban, amely itt érhető el: MDN Web Docs .
  3. A DOM-manipuláció és a teljesítmény JavaScript használatával történő optimalizálásával kapcsolatos további információkért a Smashing Magazine átfogó útmutatójában hivatkoztam: A hatékony DOM megértése .