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 đŠžââïž

