Элементы <li>
не отображаются / не скрываются, поскольку вы меняете стили их дочерних элементов <div>
.Одно из решений - вместо этого поместить классы в родительские элементы <li>
.
В этом случае я предлагаю использовать свойство display list-item
вместо block
. * 1010.*
var ChangeLayout = function(rarity) {
var listItemContainers = document.getElementsByClassName("itemContainer");
var listItemContainersByRarity = document.getElementsByClassName(rarity);
if (rarity == 'all') {
for (var j = 0; j < listItemContainers.length; j++) {
listItemContainers[j].style.display = 'list-item';
}
} else {
for (var j = 0; j < listItemContainers.length; j++) {
listItemContainers[j].style.display = 'none';
}
for (var h = 0; h < listItemContainersByRarity.length; h++) {
listItemContainersByRarity[h].style.display = 'list-item';
}
}
}
#catalogGrid {
display: grid;
grid-auto-flow: row;
grid-template-columns: repeat(3, 1fr);
grid-column-gap: 5px;
grid-row-gap: 5px;
}
<img id="gemStoneAll" src="https://picsum.photos/id/10/50/50" onclick="ChangeLayout('all')" />
<img id="gemStoneUncommon" src="https://picsum.photos/id/30/50/50" onclick="ChangeLayout('uncommon')" />
<img id="gemStoneRare" src="https://picsum.photos/id/40/50/50" onclick="ChangeLayout('rare')" />
<img id="gemStoneVeryRare" src="https://picsum.photos/id/50/50/50" onclick="ChangeLayout('veryrare')" />
<ul id=catalogGrid>
<li class="itemContainer rare">
<div>Rare</div>
</li>
<li class="itemContainer veryrare">
<div>Very Rare</div>
</li>
<li class="itemContainer uncommon">
<div>Uncommon</div>
</li>
<li class="itemContainer uncommon">
<div>Uncommon</div>
</li>
<li class="itemContainer rare">
<div>Rare</div>
</li>
<li class="itemContainer rare">
<div>Rare</div>
</li>
</ul>
Редактировать
Вот версия с некоторыми незначительными оптимизациями:
var allItems = document.getElementsByClassName("item");
var btns = document.getElementsByClassName('btn');
function changeLayout(rarity) {
var selectedItems = document.getElementsByClassName(rarity);
// hide all
Array.from(allItems).forEach((el) => {
el.classList.add('hide');
});
// show selected
Array.from(selectedItems).forEach((el) => {
el.classList.remove('hide');
});
}
// bind click handlers
Array.from(btns).forEach((el) => {
el.addEventListener('click', function() {
changeLayout(el.dataset.filter);
});
});
#grid {
display: grid;
grid-auto-flow: row;
grid-template-columns: repeat(3, 1fr);
grid-column-gap: 5px;
grid-row-gap: 5px;
}
.hide {
display: none;
}
<img class="btn" data-filter="all" src="https://picsum.photos/id/10/50/50">
<img class="btn" data-filter="uncommon" src="https://picsum.photos/id/30/50/50">
<img class="btn" data-filter="rare" src="https://picsum.photos/id/40/50/50">
<img class="btn" data-filter="veryrare" src="https://picsum.photos/id/50/50/50">
<ul id=grid>
<li class="item all rare">Rare</li>
<li class="item all veryrare">Very Rare</li>
<li class="item all uncommon">Uncommon</li>
<li class="item all uncommon">Uncommon</li>
<li class="item all rare">Rare</li>
<li class="item all rare">Rare</li>
</ul>