🔎 CrĂ©er une Mini Barre de Recherche avec JavaScript

🔎 CrĂ©er une Mini Barre de Recherche avec JavaScript

L’art de la recherche en temps rĂ©el avec includes + filter + input event

Imaginez un utilisateur

Il tape J dans l’input.
La liste se met à jour instantanément.
Il tape Ja
 la liste se réduit.
Il tape Java
 il ne reste que « JavaScript ».

Et en arriĂšre-plan, vous murmurez :

« J’ai fait ça avec seulement 15 lignes de JavaScript. » 😏

Cet article révÚle la magie derriÚre ce moment.


🧠 1. Logique d’une Search Bar (Voir la Vue d’Ensemble)

Avant d’écrire la moindre ligne de code, clarifions une chose :

Que fait réellement une barre de recherche ?

  • L’utilisateur tape quelque chose ✍
  • JavaScript capture cette saisie 🎯
  • Il la compare avec les Ă©lĂ©ments d’une liste 🔍
  • Les Ă©lĂ©ments correspondants sont affichĂ©s, les autres sont masquĂ©s đŸšȘ

Tout repose donc sur ce trio :

  • input event → « Qu’a tapĂ© l’utilisateur ? »
  • includes() → « Ce texte existe-t-il ici ? »
  • filter / condition → « Afficher ou masquer ? »

Google fait cela Ă  l’échelle de milliards de dollars.
Nous, on construit la version mini, mignonne et pĂ©dagogique 😄


đŸ§± 2. HTML – La Structure de Base (Pas de Muscles Sans Squelette)

<input 
  type="text" 
  id="searchInput" 
  placeholder="Rechercher un langage de programmation..." 
/>

<ul id="languageList">
  <li>JavaScript</li>
  <li>Python</li>
  <li>Java</li>
  <li>TypeScript</li>
  <li>React</li>
  <li>Vue</li>
  <li>Angular</li>
</ul>

🔍 Que Trouve-t-on Ici ?

  • input
    → L’endroit oĂč l’utilisateur tape
  • ul + li
    → La liste que nous allons filtrer

📌 Nous l’avons volontairement gardĂ©e simple.
Car l’objectif n’est pas le HTML, mais la logique JavaScript.


🎯 3. Entrer dans JavaScript – Rencontre avec le DOM

const searchInput = document.getElementById("searchInput");
const listItems = document.querySelectorAll("#languageList li");

🧠 Qu’avons-nous fait ?

  • RĂ©cupĂ©rĂ© l’élĂ©ment input
  • SĂ©lectionnĂ© tous les Ă©lĂ©ments de la liste

JavaScript peut maintenant contrÎler, masquer ou afficher ces éléments.

🎈 Petite note mais trùs importante :
querySelectorAll retourne une NodeList.
Elle se comporte comme un tableau, mais n’en est pas vraiment un.


⚡ 4. input Event – La Magie du Temps RĂ©el ✹

searchInput.addEventListener("input", function () {
  console.log("L'utilisateur est en train d’écrire...");
});

🎉 Pourquoi l’input Event est GĂ©nial ?

  • Il se dĂ©clenche Ă  chaque frappe
  • Pas besoin d’appuyer sur EntrĂ©e
  • UX = 🧠 + ❀

📌 Alternatives :

  • keyup → ancien mais encore utilisĂ©
  • change → se dĂ©clenche quand on quitte l’input (pas ce qu’on veut)

Search bar = input event
Aucune discussion possible 😄


đŸ”€ 5. Qu’a TapĂ© l’Utilisateur ? (La VĂ©ritĂ© sur value)

const searchText = searchInput.value;

Mais attention, voici un gros piùge 🧹

"JavaScript".includes("javascript"); // false

đŸ˜± Parce que JavaScript est sensible Ă  la casse.


đŸ›Ąïž 6. Échapper Ă  la SensibilitĂ© Ă  la Casse (La RĂšgle d’Or)

const searchText = searchInput.value.toLowerCase();

Et pour les éléments de la liste :

const text = item.textContent.toLowerCase();

📌 Rùgle d’or :
Toujours normaliser les données utilisateur
(minuscules, trim, etc.)


❀ 7. includes() – Le CƓur de la Search Bar

text.includes(searchText);

Que Fait Cette Méthode ?

  • Si ça existe → true
  • Sinon → false

Simple.
Rapide.
Lisible.

includes() = « Est-ce que ça existe ? »
La loupe du dĂ©tective 🔍


🎭 8. La Logique Principale – Afficher / Masquer

searchInput.addEventListener("input", function () {
  const searchText = searchInput.value.toLowerCase();

  listItems.forEach(item => {
    const text = item.textContent.toLowerCase();

    if (text.includes(searchText)) {
      item.style.display = "block";
    } else {
      item.style.display = "none";
    }
  });
});


đŸ§© DĂ©cortiquons le Code

đŸ”č forEach

On parcourt chaque élément de la liste :

« Toi, toi, toi
 et toi aussi. » 😄


đŸ”č if (includes)

S’il y a une correspondance :

display: block

Sinon :

display: none

C’est la manipulation du DOM dans sa forme la plus simple.


đŸ§Ș 9. Approche Plus Moderne – Avec filter

searchInput.addEventListener("input", () => {
  const value = searchInput.value.toLowerCase();

  Array.from(listItems).filter(item => {
    item.style.display = item.textContent
      .toLowerCase()
      .includes(value)
      ? "block"
      : "none";
  });
});

📌 Qu’avons-nous appris ici ?

  • Array.from() → Transforme une NodeList en tableau
  • OpĂ©rateur ternaire → Code plus propre et Ă©lĂ©gant

Quelqu’un qui voit ce code dira :

« Ce dĂ©veloppeur maĂźtrise JavaScript. » 😎


🚀 10. Cas d’Utilisation RĂ©els

OĂč peut-on utiliser cette mini search bar ?

  • 🛒 Recherche de produits e-commerce
  • đŸ‘„ Listes d’utilisateurs
  • 📂 Filtrage de fichiers
  • 💬 Recherche dans les messages de chat
  • 🎼 Commandes de jeu

Un petit exemple peut ouvrir la porte Ă  de grands projets.


💎 11. Conseils Professionnels

đŸ”č Afficher tout si l’input est vide

if (searchText === "") {
  item.style.display = "block";
}

đŸ”č Ajouter un message « Aucun rĂ©sultat trouvĂ© »

Score UX +10 ⭐

đŸ”č Pour de grandes listes

  • Utiliser le debounce
  • Éviter les mises Ă  jour DOM inutiles

🧠 Conclusion – Qu’avez-vous GagnĂ© ?

✔ input event
✔ includes()
✔ logique de filter
✔ contrîle du DOM
✔ un vĂ©ritable composant UI

Vous n’ĂȘtes plus simplement quelqu’un qui Ă©crit du code —
vous ĂȘtes un dĂ©veloppeur frontend qui pense Ă  l’expĂ©rience utilisateur đŸŠžâ€â™‚ïž

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile ißaretlenmißlerdir