Hoe elementen filteren

Leer hoe je DIV-elementen op basis van klassenamen filtert.

Filter DIV-elementen

BMW
Oranje
Volvo
Rood
Ford
Blauw
Kat
Hond
Meloen
Kiwi
Banaan
Citroen
Koe
BYD

Try it yourself

Maak filterbare DIV-elementen

Stap 1 - Voeg HTML toe:

<!-- Bedieningsknoppen -->
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')"> Toon alles</button>
  <button class="btn" onclick="filterSelection('cars')"> Auto's</button>
  <button class="btn" onclick="filterSelection('animals')"> Dieren</button>
  <button class="btn" onclick="filterSelection('fruits')"> Fruit</button>
  <button class="btn" onclick="filterSelection('colors')"> Kleuren</button>
</div>
<!-- Filterbare elementen. Let op, sommige hebben meerdere klassenamen (ze behoren tot meerdere categorieën, dan kunnen deze namen worden gebruikt) -->
<div class="container">
  <div class="filterDiv cars">BMW</div>
  <div class="filterDiv colors fruits">Oranje</div>
  <div class="filterDiv cars">Volvo</div>
  <div class="filterDiv colors">Rood</div>
  <div class="filterDiv cars">Ford</div>
  <div class="filterDiv colors">Blauw</div>
  <div class="filterDiv dieren">Kat</div>
  <div class="filterDiv dieren">Hond</div>
  <div class="filterDiv vruchten">Meloen</div>
  <div class="filterDiv vruchten dieren">Ananas</div>
  <div class="filterDiv vruchten">Banaan</div>
  <div class="filterDiv vruchten">Citroen</div>
  <div class="filterDiv dieren">Koe</div>
</div>

Tweede stap - Voeg CSS toe:

.container {
  overschotten: verborgen;
}
.filterDiv {
  zeef: links;
  achtergrondkleur: #2196F3;
  kleur: #ffffff;
  breedte: 100px;
  lijnhoogte: 100px;
  tekstuitlijning: center;
  marge: 2px;
  weergave: none; /* Standaard verborgen */
}
/* Voeg de "show" klasse toe aan de gefilterde elementen */
.show {
  weergave: blok;
}
/* Stel het stijl van de knop in */
.btn {
  rand: none;
  rand: none;
  padding: 12px 16px;
  achtergrondkleur: #f1f1f1;
  cursor: pointer;
}
/* Voeg een lichte grijze achtergrond toe bij mouseover */
.btn:hover {
  achtergrondkleur: #ddd;
}
/* Voeg een donkere achtergrond aan de actieve knop toe */
.btn.active {
  achtergrondkleur: #666;
  kleur: wit;
}

Derde stap - Voeg JavaScript toe:

filterSelection("all")
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = "";
  // 向过滤后的元素添加 "show" 类(display:block),并从未选中的元素中移除 "show" 类
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}
// 显示过滤后的元素
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];
    }
  }
}
// 隐藏未选中的元素
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(" ");
}
// 向当前的控制按钮添加活动类(高亮显示它)
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";
  });
}

Try it yourself