Como criar uma busca em uma lista HTML com Javascript puro?
Aprenda a fazer um input do tipo texto filtrar apenas os resultados buscados dentro de uma lista comum do HTML.

Criando a lista no HTML
A lista criada para esse exercício, é no formato mais comum:
<input class="search-fruits" type="text"> <ul class="fruits-list"> <li>Maçã</li> <li>Banana</li> <li>Pera</li> <li>Uva</li> <li>Mamão</li> <li>Manga</li> </ul>
Repare que já colocamos um input do tipo texto para filtrar a nossa lista
Buscando os elementos com Javascript
Vamos buscar os elementos do nosso HTML e salvá-los em variáveis:
let inputElement = document.querySelector("input")
let listElement = document.querySelector("ul")
let itemElement = listElement.querySelectorAll("li")Aqui, já temos o elemento onde o texto será digitado, a lista de elementos e cada elemento da lista.
Obs.: Nossa última variável está usando o "querySelectorAll", portanto, os elementos estão salvos dentro de um Array.
Criando o disparo do evento
Queremos que a lista seja atualizada toda vez que houver alguma alteração no "input".
Então, podemos usar esse trigger:
inputElement.addEventListener("input", (e) => {
// Aqui irá executar em toda alteração no input
})Lógica para busca
Agora que já temos o disparo criado, basta fazermos uma lógica que esconda todos os itens que não condizem com o que está sendo digitado.
Para isso, dentro do evento, vamos criar um loop passando por cada item da lista, assim:
inputElement.addEventListener("input", (e) => {
itemElement.forEach((li) => {
// Função executada para cada item da lista
})
})Repare que adicionamos o parametro "e" no evento, com esse objeto que pegaremos o que está sendo digitado, dessa forma:
let inputed = e.target.value.toLowerCase()
Nesse momento, já temos o valor digitado e uma função passando pelos elementos da lista.
Agora, temos que verificar se o texto digitado está incluso nos elementos, se sim, mantemos na lista, se não, podemos esconder.
Fica assim:
inputElement.addEventListener("input", (e) => {
let inputed = e.target.value.toLowerCase()
itemElement.forEach((li) => {
let text = li.textContent.toLowerCase()
if(text.includes(inputed)){
li.style.display = "block"
}else{
li.style.display = "none"
}
})
})Pontos de atenção:
- Repare que usamos a função "toLowerCase()", tanto no texto digitado, quanto no texto da lista, isso para não termos problemas na comparação de letras minúsculas e maiúsculas.
- Usamos a função "includes" para verificar se o texto digitado está incluso no texto de cada item da lista.
- Então, usamos um if/else, para mostrar ou esconder os elementos, utilizando "element.style.display".
Resultado Final
Aqui, aplicamos um pouco de CSS para melhor visualização:
Dicas para Trabalhar na Gestão de TI
Algoritmo que resolve Cubo Mágico com Javascript - Parte 2
Algoritmo que resolve Cubo Mágico com Javascript - Parte 1