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"; }); }