【发布时间】:2019-08-22 19:57:29
【问题描述】:
我有这段代码,但它不能正常工作。
我的问题是这些过滤器可以根据我的需要单独工作。过滤应该适用于两个过滤器。如何让它们协同工作?如何解决它,他们会一起工作吗?
let productBox = document.querySelectorAll('.product');
let selectCategory = document.querySelector('#select-category');
let selectPrice = document.querySelector('#select-price');
selectCategory.addEventListener('change', (evt) => {
let selectVal = evt.currentTarget.value;
Array.prototype.forEach.call(productBox, prodItem => {
if((selectVal !== 'all') && (prodItem.dataset.category !== selectVal)) {
prodItem.style.display = 'none'
} else {
prodItem.style.display = 'block'
}
})
});
selectPrice.addEventListener('change', (evt) => {
let selectVal = evt.currentTarget.value;
Array.prototype.forEach.call(productBox, prodItem => {
if((selectVal === '0') || (+prodItem.dataset.price <= +selectVal)) {
prodItem.style.display = 'block'
} else {
prodItem.style.display = 'none'
}
})
})
.product {
border: 1px solid;
padding: 2px;
margin: .5rem;
}
<select id="select-category">
<option value="all">All</option>
<option value="dinner">Dinner</option>
<option value="first meal">First meal</option>
<option value="garnish">Garnish</option>
</select>
<select id="select-price">
<option value="all">All</option>
<option value="30">Up to 30 dollars</option>
<option value="50">Up to 50 dollars</option>
<option value="100">Up to 100 dollars</option>
</select>
<div data-category="dinner" data-price="30" class="product">Dinner</div>
<div data-category="first meal" data-price="50" class="product">First meal</div>
<div data-category="dinner" data-price="45" class="product">Dinner2</div>
<div data-category="first meal" data-price="55" class="product">First meal2</div>
<div data-category="garnish" data-price="100" class="product">Garnish</div>
<div data-category="garnish" data-price="120" class="product">Garnish2</div>
【问题讨论】:
-
让每个循环添加或删除一个类,说明每个选择是否接受该类别,然后使用 CSS 隐藏不满足两者的所有内容(即,没有两个类)。
标签: javascript html ecmascript-6