【发布时间】:2020-07-01 15:51:25
【问题描述】:
我正在尝试压缩我在 JS 中关于 array.filter() 方法的代码 sn-p。我想根据啤酒的类别过滤啤酒,我已经使用下面的代码。但是,我不想像我一样重复自己,因此找到一种更简单/更短的方法来显示相同的代码。
<div id="filters">
<button class="filterButton">Types of beer</button>
<div class="filterOptions">
<li class="filter" data-action="filter" data-filter="IPA">IPA</li>
<li class="filter" data-action="filter" data-filter="Hefeweizen">
Hefeweizen
</li>
<li class="filter" data-action="filter" data-filter="Oktoberfest">
Oktoberfest
</li>
<li class="filter" data-action="filter" data-filter="European Lager">
European Lager
</li>
<li class="filter" data-action="filter" data-filter="Stout">Stout</li>
<li class="filter" data-action="filter" data-filter="Belgian Specialty Ale">
Belgian Specialty Ale
</li>
<li class="filter" data-action="filter" data-filter="California Common">
California Common
</li>
</div>
</div>
Javascript
function setFilters() {
//show filters:
document.querySelector(".filterButton").addEventListener("click", (e) => {
document.querySelector(".filterOptions").classList.toggle("showFilters");
});
//event listeners:
document
.querySelector("[data-filter='IPA']")
.addEventListener("click", filterIPA);
document
.querySelector("[data-filter='Hefeweizen']")
.addEventListener("click", filterHefe);
document
.querySelector("[data-filter='Oktoberfest']")
.addEventListener("click", filterOkt);
document
.querySelector("[data-filter='European Lager']")
.addEventListener("click", filterEuro);
document
.querySelector("[data-filter='Stout']")
.addEventListener("click", filterStout);
document
.querySelector("[data-filter='Belgian Specialty Ale']")
.addEventListener("click", filterBelgian);
document
.querySelector("[data-filter='California Common']")
.addEventListener("click", filterCalif);
document
.querySelector("[data-sort='alc']")
.addEventListener("click", sortAlc);
document.querySelector(".resetFilter").addEventListener("click", resetFilter);
}
function filterIPA() {
console.log(allBeers);
let ipaBeers = allBeers.filter(function (IPA) {
return IPA.category == "IPA";
});
displayBeer(ipaBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterHefe() {
console.log(allBeers);
let hefeBeers = allBeers.filter(function (hefe) {
return hefe.category == "Hefeweizen";
});
displayBeer(hefeBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterOkt() {
console.log(allBeers);
let oktBeers = allBeers.filter(function (okt) {
return okt.category == "Oktoberfest";
});
displayBeer(oktBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterEuro() {
console.log(allBeers);
let euroBeers = allBeers.filter(function (euro) {
return euro.category == "European Lager";
});
displayBeer(euroBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterStout() {
console.log(allBeers);
let stoutBeers = allBeers.filter(function (stout) {
return stout.category == "Stout";
});
displayBeer(stoutBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterBelgian() {
console.log(allBeers);
let belgianBeers = allBeers.filter(function (belgian) {
return belgian.category == "Belgian Specialty Ale";
});
displayBeer(belgianBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function filterCalif() {
console.log(allBeers);
let califBeers = allBeers.filter(function (calif) {
return calif.category == "California Common";
});
displayBeer(califBeers);
getPrices();
document.querySelector(".filterOptions").classList.remove("showFilters");
}
function resetFilter() {
location.reload();
}
【问题讨论】:
-
标记无效。
<li>元素只能是<ol>或<ul>元素的直接子元素
标签: javascript filtering minimize