How to filter elements

Learn how to filter DIV elements based on class names.

Filter DIV elements

BMW
Orange
Volvo
Red
Ford
Blue
Cat
Dog
Melon
Kiwi
Banana
Lemon
Cow
BYD

Essayez-le vous-même

Create filterable DIV elements

Step 1 - Add HTML:

<!-- Control buttons -->
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')">Show all</button>
  <button class="btn" onclick="filterSelection('cars')">Cars</button>
  <button class="btn" onclick="filterSelection('animals')">Animals</button>
  <button class="btn" onclick="filterSelection('fruits')">Fruits</button>
  <button class="btn" onclick="filterSelection('colors')">Colors</button>
</div>
<!-- Elements filtrables. Veuillez noter que certains ont plusieurs noms de classe (si ils appartiennent à plusieurs catégories, vous pouvez utiliser ces noms de classe) -->
<div class="container">
  <div class="filterDiv cars">BMW</div>
  <div class="filterDiv colors fruits">Orange</div>
  <div class="filterDiv cars">Volvo</div>
  <div class="filterDiv colors">Red</div>
  <div class="filterDiv cars">Ford</div>
  <div class="filterDiv colors">Blue</div>
  <div class="filterDiv animals">Chat</div>
  <div class="filterDiv animals">Chien</div>
  <div class="filterDiv fruits">Pastèque</div>
  <div class="filterDiv fruits animals">Kiwi</div>
  <div class="filterDiv fruits">Banane</div>
  <div class="filterDiv fruits">Citron</div>
  <div class="filterDiv animals">Vache</div>
</div>

Étape 2 - Ajouter CSS :

.container {
  survol: caché;
}
.filterDiv {
  flottant: gauche;
  couleur de fond: #2196F3;
  couleur: #ffffff;
  largeur: 100px;
  hauteur de ligne: 100px;
  alignement de texte: centre;
  marge: 2px;
  affichage: invisible; /* Masqué par défaut */
}
/* Ajouter la classe "show" aux éléments filtrés */
.show {
  affichage: bloc;
}
/* Définir le style des boutons */
.btn {
  bordure: none;
  contour: none;
  marge: 12px 16px;
  couleur de fond: #f1f1f1;
  curseur: pointeur;
}
/* Ajouter un fond clair lors du survol de la souris */
.btn:hover {
  couleur de fond: #ddd;
}
/* Ajouter un fond foncé à la bouton active */
.btn.active {
  couleur de fond: #666;
  couleur: blanc;
}

Étape 3 - Ajouter JavaScript :

filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = "";
  // Ajouter la classe "show" aux éléments filtrés (display:block) et supprimer la classe "show" des éléments non sélectionnés
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}
// Afficher les éléments filtrés
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];
    }
  }
}
// Cacher les éléments non sélectionnés
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(" ");
}
// Ajouter la classe active actuelle au bouton de contrôle (la rendre en surbrillance)
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";
  });
}

Essayez-le vous-même