Como filtrar elementos

Aprenda a filtrar elementos com base em classes.

Filtrar elementos DIV

BMW
Laranja
Volvo
Vermelho
Ford
Azul
Gato
Cão
Melão
Kiwi
Banana
Limão
Vaca
BYD

Experimente você mesmo

Crie elementos DIV filtráveis

Primeiro passo - Adicionar HTML:

<!-- Botões de controle -->
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('todos')"> Mostrar todos</button>
  <button class="btn" onclick="filterSelection('carros')"> Carros</button>
  <button class="btn" onclick="filterSelection('animais')"> Animais</button>
  <button class="btn" onclick="filterSelection('frutas')"> Frutas</button>
  <button class="btn" onclick="filterSelection('cores')"> Cores</button>
</div>
<!-- Elementos filtráveis. Por favor, note que alguns possuem múltiplas classes (se pertencerem a várias categorias, podem usar essas classes) -->
<div class="container">
  <div class="filterDiv carros">BMW</div>
  <div class="filterDiv cores frutas">Laranja</div>
  <div class="filterDiv carros">Volvo</div>
  <div class="filterDiv cores">Vermelho</div>
  <div class="filterDiv carros">Ford</div>
  <div class="filterDiv cores">Azul</div>
  <div class="filterDiv animais">Gato</div>
  <div class="filterDiv animais">Cão</div>
  <div class="filterDiv frutas">Melão</div>
  <div class="filterDiv frutas animais">Kiwi</div>
  <div class="filterDiv frutas">Banana</div>
  <div class="filterDiv frutas">Limão</div>
  <div class="filterDiv animais">Vaca</div>
</div>

Segundo passo - Adicionar CSS:

.container {
  transbordamento: escondido;
}
.filterDiv {
  flutuante: esquerda;
  cor de fundo: #2196F3;
  cor: #ffffff;
  largura: 100px;
  altura de linha: 100px;
  alinhamento de texto: centro;
  margem: 2px;
  exibição: none; /* Oculto por padrão */
}
/* Adicionar classe "show" aos elementos filtrados */
.show {
  exibição: bloco;
}
/* Definir estilo do botão */
.btn {
  borda: none;
  contorno: none;
  largura: 12px 16px;
  cor de fundo: #f1f1f1;
  cursor: ponteiro;
}
/* Adicionar fundo cinza claro ao passar o mouse */
.btn:hover {
  cor de fundo: #ddd;
}
/* Adicionar fundo escuro ao botão ativo */
.btn.active {
  cor de fundo: #666;
  cor: branco;
}

Terceiro passo - Adicionar JavaScript:

filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = ";";
  // Adicionar a classe "show" aos elementos filtrados (display:block) e remover a classe "show" dos elementos não selecionados
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}
// Mostrar elementos filtrados
function w3AddClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {
      element.className += " " + arr2[i];
    }
  }
}
// Ocultar elementos não selecionados
function w3RemoveClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);
    }
  }
  element.className = arr1.join(" ");
}
// Adicionar a classe ativa ao botão de controle atual (destacá-lo)
var btnContainer = document.getElementById("myBtnContainer");
var btns = btnContainer.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
  btns[i].addEventListener("click", function() {
    var current = document.getElementsByClassName("active");
    current[0].className = current[0].className.replace(" active", "");
    this.className += " active";
  });
}

Experimente você mesmo