Amélioration du filtrage des produits avec JavaScript et plusieurs catégories
Créer des pages Web dynamiques et conviviales implique d’offrir une navigation transparente et un filtrage facile du contenu. Ceci est particulièrement utile lors de l’affichage de produits ou d’articles appartenant à plusieurs catégories. Grâce à JavaScript, nous pouvons mettre en œuvre une manière intuitive de filtrer les éléments en fonction de plusieurs catégories, permettant ainsi aux utilisateurs de trouver plus facilement exactement ce qu'ils recherchent.
Dans ce scénario, cliquer sur un bouton de catégorie devrait filtrer les éléments affichés sur la page. L'utilisateur doit pouvoir sélectionner plusieurs catégories simultanément, permettant une vue plus personnalisée des produits. Par exemple, la sélection de « Saumon » et « Crevettes » ne devrait afficher que les éléments contenant les deux ingrédients.
Actuellement, de nombreuses implémentations fonctionnent bien pour le filtrage d'une seule catégorie, mais l'ajout de plusieurs catégories peut s'avérer délicat. Le défi consiste à garantir que toutes les catégories sélectionnées sont prises en compte lors du choix des éléments à afficher ou à masquer. Cet article explique comment étendre efficacement le filtrage d'une seule catégorie au filtrage multi-catégories à l'aide de JavaScript.
Dans ce guide, nous présenterons une solution qui filtre dynamiquement les cartes en fonction de plusieurs boutons actifs, offrant ainsi une expérience simple et conviviale. En mettant en œuvre cette solution JavaScript, vous apprendrez à améliorer l'interactivité de votre page Web et à stimuler l'engagement des utilisateurs.
Commande | Exemple d'utilisation |
---|---|
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 =>La méthode Every() est utilisée pour vérifier si toutes les catégories sélectionnées correspondent aux catégories de chaque carte. Ceci est crucial pour garantir le bon fonctionnement des filtres de plusieurs catégories. Par exemple, activeCategories.every(cat => cardCategories.includes(cat)) garantit que toutes les catégories sélectionnées sont contenues dans les catégories de la carte. |
toggle() | Cette commande active ou désactive une classe. Il est utilisé pour ajouter ou supprimer dynamiquement la classe de bouton actif d'un bouton de catégorie lorsque vous cliquez dessus. Cela permet de savoir si un bouton est actif, ce qui a un impact sur les cartes affichées ou masquées. |
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 =>La méthode filter() crée un nouveau tableau avec tous les éléments qui réussissent un test. Dans l'exemple Node.js, products.filter(product => selectedCategories.every(cat => product.categories.includes(cat))) filtre les produits en fonction des catégories sélectionnées par l'utilisateur. |
split() | La méthode split() est utilisée pour convertir une chaîne de catégories en un tableau. Par exemple, card.getAttribute("data-category").split(",") divise la chaîne de catégorie séparée par des virgules en un tableau pour une comparaison plus facile avec les catégories actives. |
classList.add() | Cette méthode ajoute une classe spécifiée à un élément. Il est utilisé pour ajouter la classe inactive-card afin de masquer les cartes qui ne correspondent pas aux filtres actifs. Par exemple, card.classList.add("inactive-card") masque la carte lorsque ses catégories ne correspondent pas à celles sélectionnées. |
trim() | La méthode trim() est utilisée pour supprimer les espaces aux deux extrémités d’une chaîne. Dans le script, cela garantit que les catégories des boutons sont clairement comparées aux catégories des données produit. Par exemple, button.innerText.trim() garantit qu'aucun espace supplémentaire n'est pris en compte. |
post() | Dans le script backend, post() est utilisé pour créer une route qui accepte les données envoyées par le client (dans ce cas, les catégories sélectionnées). Le script côté serveur traite cette demande pour renvoyer les données produit filtrées en fonction des catégories sélectionnées. |
json() | Cette méthode dans Express est utilisée pour renvoyer une réponse JSON au client. Par exemple, res.json(filteredProducts) renvoie les produits qui correspondent aux catégories sélectionnées, permettant au côté client d'afficher les produits filtrés. |
Comprendre le filtrage multicatégories en JavaScript
Les scripts fournis ci-dessus se concentrent sur le filtrage dynamique des éléments en fonction de plusieurs catégories, ce qui est essentiel pour améliorer l'expérience utilisateur sur les sites Web basés sur des produits. L'objectif est de permettre aux utilisateurs de sélectionner plusieurs catégories et de filtrer les cartes en conséquence. Ceci est réalisé à l'aide de JavaScript en capturant les clics sur les boutons, en stockant les catégories sélectionnées dans un tableau, puis en affichant uniquement les cartes correspondant à toutes les catégories sélectionnées. Le processus est lancé lorsqu'un utilisateur clique sur un bouton de catégorie, ce qui fait basculer l'état actif de ce bouton. La valeur du bouton est stockée dans un tableau qui représente tous les filtres actifs.
Une partie essentielle de cette solution consiste à utiliser la méthode des tableaux . Cette commande garantit que toutes les catégories sélectionnées sont comparées aux catégories de la carte. Il vérifie si chaque catégorie active se trouve dans les catégories de la carte, permettant ainsi un bon fonctionnement du filtrage multi-catégories. Une autre méthode importante est , qui est utilisé pour diviser la chaîne de catégories de chaque carte en un tableau. Cela permet à JavaScript de comparer les catégories individuelles et de déterminer quelles cartes doivent être affichées ou masquées.
De plus, le script utilise pour ajouter ou supprimer la classe active sur les boutons lorsque vous cliquez dessus. Cette classe est cruciale pour le retour visuel, car elle indique quels boutons sont actuellement actifs. Lorsqu'un bouton est désactivé, sa catégorie est supprimée du tableau des catégories actives, et la fonction de filtrage est à nouveau déclenchée pour mettre à jour l'affichage. Les cartes qui ne correspondent pas aux catégories actives sont masquées en ajoutant une classe pour les marquer comme inactives. Cette méthode garantit que les utilisateurs peuvent facilement affiner leur recherche en sélectionnant ou en désélectionnant plusieurs filtres.
Le script back-end est structuré pour gérer le filtrage des produits côté serveur à l'aide de Node.js et Express. Les catégories sélectionnées sont envoyées au serveur via une requête POST, et le serveur traite cette requête en filtrant les produits et en renvoyant uniquement les articles correspondant aux catégories actives. Le serveur utilise la même logique que le front-end, en utilisant le méthode pour comparer les catégories sélectionnées avec les catégories de chaque produit. Cette approche est utile lorsqu'il s'agit de grands ensembles de données, car elle décharge le traitement du côté client, ce qui se traduit par de meilleures performances pour les utilisateurs finaux.
Filtrage dynamique des éléments à l'aide de JavaScript : filtrage multicatégorie optimisé
Approche de développement front-end utilisant 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";
});
}
Implémentation backend pour le filtrage dynamique des éléments
Approche côté serveur utilisant Node.js et 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'));
Techniques avancées pour le filtrage multi-catégories dans le développement Web
Lors de la mise en œuvre d'un système de filtrage multi-catégories dans , il est important de prendre en compte non seulement l’interaction avec l’interface utilisateur, mais également la structure de données qui la prend en charge. Dans le cadre de contenus dynamiques, maintenir un contenu optimisé et propre la stratégie de manipulation est la clé. Par exemple, vous pouvez utiliser des techniques de délégation d'événements pour gérer efficacement plusieurs boutons de catégorie, en garantissant que seuls les éléments DOM requis sont manipulés.
Un aspect qui peut encore améliorer l'expérience de filtrage consiste à ajouter des éléments d'interface utilisateur plus sophistiqués, tels que des cases à cocher ou des listes déroulantes à sélection multiple, au lieu de simples boutons. Cela permet aux utilisateurs d'interagir avec les filtres de manière plus granulaire. Par exemple, une liste déroulante autorisant plusieurs sélections offre une interface utilisateur plus claire et plus de flexibilité aux utilisateurs lors du choix des catégories. Cela peut être implémenté avec une logique et un style JavaScript supplémentaires, tout en utilisant des méthodes de tableau telles que et pour la comparaison des catégories.
Une autre considération essentielle est la performance du système de filtrage, en particulier lorsqu'il s'agit d'un grand ensemble de données. Lorsque vous avez des centaines ou des milliers d’éléments à filtrer, il est crucial de minimiser autant que possible la manipulation du DOM. Une façon d'optimiser cela consiste à regrouper les mises à jour du DOM, en utilisant ou méthodes pour contrôler le taux de mises à jour et garantir une expérience utilisateur fluide. Ces techniques améliorent non seulement les performances, mais améliorent également la réactivité de la page, la rendant plus évolutive pour des ensembles de données plus volumineux.
- Comment gérer plusieurs filtres actifs ?
- Vous pouvez stocker des filtres actifs dans un tableau et utiliser pour vérifier si la catégorie de chaque carte correspond aux filtres sélectionnés.
- Que se passe-t-il si j'ai des catégories qui se chevauchent ?
- En utilisant et , vous pouvez séparer et nettoyer les données de catégorie, en vous assurant que chaque catégorie est correctement comparée aux filtres actifs.
- Comment puis-je optimiser le filtrage pour les grands ensembles de données ?
- Mises à jour du DOM par lots en utilisant ou mettre en œuvre un fonction pour réduire la fréquence des opérations de filtrage, améliorant ainsi les performances.
- Comment afficher les éléments correspondant à toutes les catégories sélectionnées ?
- Utiliser pour garantir que toutes les catégories sélectionnées sont incluses dans les données de chaque carte avant de les rendre visibles.
- Quelle est la meilleure façon de gérer les images cassées dans le système de cartes ?
- Mettre en œuvre un écouteur d'événements sur chaque image pour masquer ou remplacer l'image en cas d'échec de chargement, améliorant ainsi l'expérience utilisateur.
La mise en œuvre d'un filtrage multicatégories dans les pages Web peut améliorer considérablement l'expérience utilisateur, permettant aux utilisateurs de trouver plus facilement exactement ce dont ils ont besoin. Avec une utilisation prudente de des méthodes telles que et , les développeurs peuvent créer une solution efficace et évolutive qui gère de manière fluide de grands ensembles de données.
De plus, en optimisant la manipulation du DOM et en réduisant les opérations inutiles, cette approche garantit les performances même avec une interaction utilisateur élevée. Ce système de filtrage peut être intégré aux sites Web de commerce électronique, aux portefeuilles ou à toute page nécessitant un affichage de contenu dynamique basé sur plusieurs filtres.
- Le contenu et les exemples de code de cet article ont été inspirés par un exemple CodePen d'Alena Chuyankova. Vous pouvez explorer le code original ici : CodePen d'Alena .
- Des concepts supplémentaires sur les méthodes de tableau JavaScript et la gestion des événements ont été référencés dans la documentation officielle de Mozilla Developer Network, accessible ici : Documents Web MDN .
- Pour plus d'informations sur l'optimisation de la manipulation et des performances du DOM à l'aide de JavaScript, j'ai fait référence à ce guide complet de Smashing Magazine : Comprendre le DOM efficace .