Toodete filtreerimise täiustamine JavaScripti ja mitme kategooria abil
Dünaamiliste ja kasutajasõbralike veebilehtede loomine hõlmab sujuva navigeerimise ja sisu lihtsa filtreerimise pakkumist. See on eriti kasulik mitmesse kategooriasse kuuluvate toodete või üksuste kuvamisel. JavaScripti kasutades saame rakendada intuitiivset viisi üksuste filtreerimiseks mitme kategooria alusel, muutes kasutajatel lihtsamaks just seda, mida nad otsivad.
Selle stsenaariumi korral peaks kategoorianupul klõpsamine lehel kuvatavaid üksusi filtreerima. Kasutajal peaks olema võimalik valida korraga mitu kategooriat, mis võimaldab tooteid paremini kohandada. Näiteks "Lõhe" ja "Krevetid" valimisel kuvatakse ainult üksused, mis sisaldavad mõlemat koostisosa.
Praegu töötavad paljud rakendused hästi ühe kategooria filtreerimiseks, kuid mitme kategooria lisamine võib olla keeruline. Väljakutse seisneb selles, et kõiki valitud kategooriaid võetakse arvesse, kui otsustatakse, milliseid üksusi kuvada või peita. Selles artiklis uuritakse, kuidas laiendada ühe kategooria filtreerimist tõhusal viisil mitme kategooria filtreerimiseks JavaScripti abil.
Selles juhendis käsitleme lahendust, mis filtreerib dünaamiliselt kaarte mitme aktiivse nupu alusel, pakkudes lihtsat ja kasutajasõbralikku kogemust. Selle JavaScripti lahenduse rakendamisel saate teada, kuidas parandada oma veebilehe interaktiivsust ja suurendada kasutajate seotust.
Käsk | Kasutusnäide |
---|---|
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 =>Iga() meetodit kasutatakse kontrollimaks, kas kõik valitud kategooriad vastavad iga kaardi kategooriatele. See on mitme kategooria filtri õige töö tagamiseks ülioluline. Näiteks ActiveCategories.every(cat => cardCategories.includes(cat)) tagab, et kõik valitud kategooriad sisalduvad kaardi kategooriates. |
toggle() | See käsk lülitab klassi sisse või välja. Seda kasutatakse aktiivse nupu klassi dünaamiliseks lisamiseks või eemaldamiseks kategoorianupul, kui sellel klõpsatakse. See aitab jälgida, kas nupp on aktiivne, mõjutades kuvatavaid või peidetud kaarte. |
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 =>Meetod filter() loob uue massiivi kõigi testi läbivate elementidega. Node.js näites filtreerib tooted.filter(product => selectedCategories.every(cat => product.categories.includes(cat))) tooted kasutaja valitud kategooriate alusel. |
split() | Meetodit split() kasutatakse kategooriate stringi massiiviks teisendamiseks. Näiteks card.getAttribute("data-category").split(",") jagab komadega eraldatud kategooria stringi massiiviks, et seda oleks lihtsam aktiivsete kategooriatega võrrelda. |
classList.add() | See meetod lisab elemendile määratud klassi. Seda kasutatakse passiivse kaardi klassi lisamiseks, et peita kaardid, mis ei vasta aktiivsetele filtritele. Näiteks card.classList.add("inactive-card") peidab kaardi, kui selle kategooriad ei ühti valitud kategooriatega. |
trim() | Trimmi () meetodit kasutatakse tühikute eemaldamiseks stringi mõlemast otsast. Skriptis tagab see, et nuppude kategooriaid võrreldakse puhtalt tooteandmete kategooriatega. Näiteks button.innerText.trim() tagab, et lisatühikuid ei arvestata. |
post() | Taustskriptis kasutatakse post() marsruudi loomiseks, mis aktsepteerib kliendi saadetud andmeid (antud juhul valitud kategooriaid). Serveripoolne skript töötleb seda päringut filtreeritud tooteandmete tagastamiseks valitud kategooriate alusel. |
json() | Seda Expressi meetodit kasutatakse JSON-vastuse saatmiseks kliendile tagasi. Näiteks res.json(filteredProducts) tagastab tooted, mis vastavad valitud kategooriatele, võimaldades kliendi poolel kuvada filtreeritud tooteid. |
JavaScripti mitme kategooria filtreerimise mõistmine
Ülaltoodud skriptid keskenduvad üksuste dünaamilisele filtreerimisele mitme kategooria alusel, mis on oluline tootepõhiste veebisaitide kasutajakogemuse parandamiseks. Eesmärk on võimaldada kasutajatel valida mitu kategooriat ja vastavalt sellele kaarte filtreerida. See saavutatakse JavaScripti abil, püüdes kinni nupuklõpsud, salvestades valitud kategooriad massiivi ja kuvades seejärel ainult kaardid, mis vastavad kõigile valitud kategooriatele. Protsess käivitub, kui kasutaja klõpsab kategoorianupul, mis lülitab selle nupu aktiivse oleku. Nupu väärtus salvestatakse massiivi, mis esindab kõiki aktiivseid filtreid.
Selle lahenduse kriitiline osa on massiivimeetodi kasutamine iga (). See käsk tagab, et kõiki valitud kategooriaid võrreldakse kaardi kategooriatega. See kontrollib, kas iga aktiivne kategooria leidub kaardi kategooriates, võimaldades seega mitme kategooria filtreerimisel sujuvalt toimida. Teine oluline meetod on split (), mida kasutatakse iga kaardi kategooriate jada massiiviks jagamiseks. See võimaldab JavaScriptil võrrelda üksikuid kategooriaid ja määrata, millised kaardid tuleks kuvada või peita.
Lisaks kasutab skript classList.toggle() nuppudele aktiivse klassi lisamiseks või eemaldamiseks klõpsamisel. See klass on visuaalse tagasiside jaoks ülioluline, kuna see näitab, millised nupud on hetkel aktiivsed. Kui nupp on desaktiveeritud, eemaldatakse selle kategooria aktiivsete kategooriate massiivist ja ekraani värskendamiseks käivitatakse uuesti filtreerimisfunktsioon. Kaardid, mis ei vasta aktiivsetele kategooriatele, peidetakse, lisades nende passiivseks märkimiseks klassi. See meetod tagab, et kasutajad saavad hõlpsalt otsingut täpsustada, valides mitu filtrit või tühistades valiku.
Tagaprogrammi skript on üles ehitatud nii, et see käsitleb toodete filtreerimist serveripoolsel Node.js-i ja Expressi abil. Valitud kategooriad saadetakse serverisse POST-päringu kaudu ja server töötleb seda päringut, filtreerides tooted ja tagastades ainult need üksused, mis vastavad aktiivsetele kategooriatele. Server kasutab sama loogikat nagu esiots, kasutades filter() meetod valitud kategooriate võrdlemiseks iga toote kategooriatega. See lähenemine on kasulik suurte andmekogumite käsitlemisel, kuna see koormab töötlemise kliendi poolelt maha, mille tulemuseks on lõppkasutajate jaoks parem jõudlus.
Dünaamiline üksuste filtreerimine JavaScripti abil: optimeeritud mitme kategooria filtreerimine
Esiotsa arendusviis, kasutades Vanilla JavaScripti
// 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";
});
}
Dünaamilise üksuste filtreerimise taustarakendus
Serveripoolne lähenemine Node.js'i ja Expressi abil
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'));
Täiustatud tehnikad mitme kategooria filtreerimiseks veebiarenduses
Mitme kategooria filtreerimissüsteemi juurutamisel JavaScript, on oluline arvestada mitte ainult kasutajaliidese interaktsiooni, vaid ka seda toetava andmestruktuuriga. Dünaamilise sisu kontekstis säilitades optimeeritud ja puhta DOM manipuleerimisstrateegia on võtmetähtsusega. Näiteks saate mitme kategooria nupu tõhusaks käsitlemiseks kasutada sündmuste delegeerimise tehnikaid, tagades, et manipuleeritakse ainult vajalikke DOM-i elemente.
Üks aspekt, mis võib filtreerimiskogemust veelgi täiustada, on keerukamate kasutajaliidese elementide, näiteks märkeruutude või mitme valiku rippmenüüde lisamine lihtsate nuppude asemel. See võimaldab kasutajatel filtritega üksikasjalikumalt suhelda. Näiteks mitut valikut võimaldav rippmenüü pakub kasutajatele kategooriate valimisel puhtamat kasutajaliidest ja suuremat paindlikkust. Seda saab rakendada täiendava JavaScripti loogika ja stiiliga, kasutades samas massiivimeetodeid nagu filter() ja every() kategooriate võrdlemiseks.
Teine oluline kaalutlus on filtreerimissüsteemi jõudlus, eriti kui tegemist on suure andmestikuga. Kui teil on filtreerimiseks sadu või tuhandeid üksusi, on ülioluline minimeerida DOM-i manipuleerimist nii palju kui võimalik. Üks viis selle optimeerimiseks on DOM-i värskenduste komplekteerimine, kasutades requestAnimationFrame() või debounce() meetodid värskenduste määra kontrollimiseks ja sujuva kasutuskogemuse tagamiseks. Need tehnikad mitte ainult ei paranda jõudlust, vaid suurendavad ka lehe reageerimisvõimet, muutes selle suuremate andmekogumite jaoks skaleeritavamaks.
Korduma kippuvad küsimused mitme kategooria filtreerimise kohta JavaScriptis
- Kuidas käsitleda mitut aktiivset filtrit?
- Saate salvestada aktiivseid filtreid massiivi ja kasutada every() kontrollimaks, kas iga kaardi kategooria vastab valitud filtritele.
- Mis juhtub, kui mul on kattuvad kategooriad?
- Kasutades split() ja trim(), saate kategooriaandmeid eraldada ja puhastada, tagades, et iga kategooriat võrreldakse korralikult aktiivsete filtritega.
- Kuidas optimeerida suurte andmekogumite filtreerimist?
- Pakkige DOM-i värskendused kasutades requestAnimationFrame() või rakendada a debounce() funktsioon filtreerimistoimingute sageduse vähendamiseks, parandades jõudlust.
- Kuidas kuvada üksusi, mis vastavad kõigile valitud kategooriatele?
- Kasutage every() et kõik valitud kategooriad oleksid enne nende nähtavaks tegemist iga kaardi andmetes kaasatud.
- Kuidas on kaardisüsteemis parim viis katkiste piltide käsitlemiseks?
- Rakendage an error sündmuste kuulaja igal pildil, et peita või asendada pilt, kui seda ei õnnestu laadida, parandades kasutajakogemust.
Viimased mõtted JavaScripti filtreerimistehnikate kohta
Mitme kategooria filtreerimise rakendamine veebilehtedel võib oluliselt parandada kasutajakogemust, muutes kasutajatel lihtsamaks just selle, mida nad vajavad. Hoolikalt kasutades JavaScript meetodid nagu toggle() ja iga (), saavad arendajad luua tõhusa skaleeritava lahenduse, mis käsitleb sujuvalt suuri andmekogusid.
Veelgi enam, optimeerides DOM-i manipuleerimist ja vähendades tarbetuid toiminguid, tagab see lähenemine jõudluse isegi suure kasutajainteraktsiooni korral. Selle filtreerimissüsteemi saab integreerida e-kaubanduse veebisaitidele, portfellidesse või mis tahes lehtedesse, mis nõuavad mitmel filtril põhinevat dünaamilist sisu kuvamist.
Allika ja viidete jaotis
- Selle artikli sisu ja koodinäited on inspireeritud Alena Chuyankova CodePeni näitest. Algse koodiga saate tutvuda siin: Alena koodipliiats .
- Täiendavad kontseptsioonid JavaScripti massiivi meetodite ja sündmuste käsitlemise kohta viidati ametlikust Mozilla Developer Networki dokumentatsioonist, mis on kättesaadav siit: MDN-i veebidokumendid .
- Lisateabe saamiseks DOM-i manipuleerimise ja jõudluse optimeerimise kohta JavaScripti abil viitasin sellele Smashing Magazine'i põhjalikule juhendile: Tõhusa DOM-i mõistmine .