Pular para o conteúdo principal
Digite para buscar artigos...
↵ buscaresc fechar14 artigos
Como criar uma busca em uma lista HTML com Javascript puro?
JavaScript

Como criar uma busca em uma lista HTML com Javascript puro?

Saiba como utilizar um input do tipo "text" para filtrar os resultados de uma lista. Utilizando apenas HTML e Javascript Puro.

Guilherme Tavano
Nesta Página

Criando a lista no HTML

A lista criada para esse exercício, é no formato mais comum:

html
<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:

javascript
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:

javascript
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:

javascript
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:

javascript
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:

javascript
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:

html
<iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/tavano/embed/poLYavo?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/tavano/pen/poLYavo">
  Untitled</a> by Guilherme (<a href="https://codepen.io/tavano">@tavano</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>

Sobre o Autor

GT
Guilherme TavanoVer todos os posts →