Cómo filtrar elementos

Aprenda cómo filtrar DIV basándose en los nombres de clase.

Filtrar DIV

BMW
Naranja
Volvo
Rojo
Ford
Azul
Gato
Perro
Melón
Kiwi
Plátano
Limón
Vaca
BYD

亲自试一试

Cree elementos DIV filtrables

Paso 1 - Añadir HTML:

<!-- Botones de control -->
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')"> Mostrar todo</button>
  <button class="btn" onclick="filterSelection('cars')"> Coches</button>
  <button class="btn" onclick="filterSelection('animals')"> Animales</button>
  <button class="btn" onclick="filterSelection('fruits')"> Frutas</button>
  <button class="btn" onclick="filterSelection('colors')"> Colores</button>
</div>
<!-- Elementos filtrables. Por favor, tenga en cuenta que algunos tienen múltiples nombres de clase (si pertenecen a múltiples categorías, se pueden usar estos nombres de clase) -->
<div class="container">
  <div class="filterDiv cars">BMW</div>
  <div class="filterDiv colors fruits">Naranja</div>
  <div class="filterDiv cars">Volvo</div>
  <div class="filterDiv colors">Rojo</div>
  <div class="filterDiv cars">Ford</div>
  <div class="filterDiv colors">Azul</div>
  <div class="filterDiv animals">Gato</div>
  <div class="filterDiv animals">Perro</div>
  <div class="filterDiv fruits">Melón</div>
  <div class="filterDiv fruits animals">Kiwi</div>
  <div class="filterDiv fruits">Plátano</div>
  <div class="filterDiv fruits">Limón</div>
  <div class="filterDiv animals">Vaca</div>
</div>

Segundo - Añadir CSS:

.container {
  overflow: hidden;
}
.filterDiv {
  float: left;
  background-color: #2196F3;
  color: #ffffff;
  width: 100px;
  line-height: 100px;
  text-align: center;
  margin: 2px;
  display: none; /* Oculto por defecto */
}
/* Añadir la clase "show" a los elementos filtrados */
.show {
  display: block;
}
/* Establecer el estilo de los botones */
.btn {
  border: none;
  outline: none;
  padding: 12px 16px;
  background-color: #f1f1f1;
  cursor: pointer;
}
/* Añadir fondo claro cuando el ratón se posa */
.btn:hover {
  background-color: #ddd;
}
/* Añadir fondo oscuro a los botones activos */
.btn.active {
  background-color: #666;
  color: white;
}

Tercero - Añadir JavaScript:

filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = ";";
  // Añadir la clase "show" (display:block) a los elementos filtrados y quitar la clase "show" de los elementos no seleccionados
  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 no seleccionados
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(" ");
}
// Añadir la clase de actividad (resaltado) al botón de control actual
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";
  });
}

亲自试一试