Étiquette : inArray

[jQuery] Stocker plusieurs données dans une variable sous forme de tableau et interroger la variable pour savoir si elle contient une donnée ou pas

Source: https://stackoverflow.com/questions/13509669/find-out-if-a-variable-is-in-an-array

[jQuery] Créer des catégories et utiliser leurs scopes pour trier des éléments du DOM

Problème:

Mon code m’affiche une liste de boutiques d’une même enseigne sur l’ensemble des villes françaises. Cette liste ne fait l’objet d’aucun tri. J’ai besoin de créer 3 groupes bien distincts de boutiques:

  • Les boutiques sur Paris
  • Les boutiques en région parisienne
  • Les boutiques en province

Exemple du code source de ma liste de boutiques (vous observerez pour la suite de ce tutoriel la présence des classes .shop-all pour la liste et .shop-zipcode pour baliser chaque code postal) :

Solution:

Préparer le markup HTML à la création dynamique de 3 listes.

Dans la source HTML, on initie une liste pour chacun des 3 groupes précités.

Récupérer une information de nature similaire sur chaque élément qui nous permettra ensuite d’effectuer le tri voulu.

Pour chaque boutique, on commence via les méthodes jQuery .each() et .text() par récupérer le code postal complet (5 caractères) marqué par la classe .shop-zipcode qui se trouve dans le DOM pour baliser chaque code postal. On tronque immédiatement chaque valeur récupérée pour ne conserver que les 2 premiers caractères via la méthode .substring() et on l’affiche dans le DOM via un data-attribute data-zipcode="" qu’on affecte à chaque élément <li></li> de notre liste initiale de boutiques.

Déterminer un scope pour chaque catégorie et marquer chaque élément de la liste en fonction.

On attribue à chaque boutique (chaque élément de notre liste initiale) une classe .is-paris, .is-idf ou .is-province en fonction de la zone géographique (nos catégories) dans laquelle elle se situe.

Au préalable, on crée un tableau idfCodeList qui regroupe tous les code postaux qui constituent l’Ile-de-France.

On va ensuite marquer par une classe ajoutée dans le DOM chaque élément de notre liste en fonction de sa catégorie. On commence par localiser les boutiques sur Paris dont le scope est constitué des codes postaux qui commencent par « 75 » avec une première condition if().

On marque ensuite les éléments dont le code postal figure dans notre tableau idfCodeList avec une seconde condition else if(). La méthode jQuery .inArray va nous permettre de vérifier si chaque élément de liste possède un code postal qui correspond au scope du tableau que nous venons de créer et de marquer les éléments correspondants en fonction.

Pour finir, on marque les éléments restants (boutiques en province) puisqu’ils n’entrent dans aucun des deux premiers scopes (Paris, Ile-de-France) que nous avons établi.

On déplace chaque élément précédemment marqué dans la catégorie correspondante.

On commence, pour écrire moins de code, par déclarer dans un tableau isZones un libellé pour chacune des trois zones qui serviront à trier les boutiques. Ces libellés doivent être repris de ceux des IDs des 3 listes initiées précédemment dans votre source HTML.

On peut ensuite créer une boucle qui affectera dynamiquement chaque boutique à l’une des 3 listes correspondante dans le DOM en fonction de la zone géographique dans laquelle elle se trouve. Pour ce faire, on utilise les libellés déclarés dans le tableau isZones.

Pour finir, nettoyer le DOM de tout markup inutile.

La liste initale de boutiques est maintenant vide. Supprimons là du DOM.

Code jQuery complet sans les commentaires: