选择“все”选项时,JS 需要 return 所有值
JS needs to return all values when selecting the "все" option
代码中的问题是这样的:我想不出如何 return 选择“все”选项时的所有元素
我将非常感谢任何帮助
<div class="filter-box">
<div class="select-box">
<label class="filter-label">Категория</label>
<select id="cats" class="select-control">
<option value="0">Все</option>
<option value="1">Завтраки</option>
<option value="2">Первые блюда</option>
<option value="3">Гарниры</option>
</select>
</div><!-- /.select-box -->
<div class="price-select-box">
<label class="filter-label">Цена</label>
<select id="price" class="select-control">
<option value="0">Все</option>
<option value="30">До 30 грн</option>
<option value="50">До 50 грн</option>
<option value="100">До 100 грн</option>
<option value="150">До 150 грн</option>
</select>
</div><!-- /.price-select-box -->
</div>
<div id="products" class="products-box grid-box "> </div>
const products = document.getElementById("products");
const catsSel = document.getElementById("cats");
const priceSel = document.getElementById("price");
document.addEventListener('change', handleChange)
function handleChange(e) {
const {target} = e;
if(target.id !== "cats" && target.id !== "price") {
return;
}
const selectedCat = parseInt(catsSel.value)
const selectedPrice = parseInt(priceSel.value)
const data = defaultData.products.filter((item) => {
return (
(selectedCat === -1 || item.cid === selectedCat) &&
(selectedPrice === -1 || item.price <= selectedPrice)
)
})
render(data)
}
var defaultData = {
cats: [
{ id: 1, title: "Все" },
{ id: 2, title: "Завтраки" },
{ id: 3, title: "Первые блюда" },
{ id: 4, title: "Гарниры" }
],
products: [
{
id: 1,
cid: 1,
title: "Овсяная каша с фруктами",
im: "<img class='img-fluid' src='i/im1.jpg'>",
price: 30
},
{
id: 2,
cid: 1,
title: "Яичница глазунья с овощами на сковородке",
im: "<img class='img-fluid' src='i/im2.jpg'>",
price: 25
},
{
id: 3,
cid: 1,
title: "Сет азербайджанский завтрак",
im: "<img class='img-fluid' src='i/im3.jpg'>",
price: 10
},
{
id: 4,
cid: 4,
title: "Яичница с помидорами по-бакински",
im: "<img class='img-fluid' src='i/im4.jpg'>",
price: 28
},
{ id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
{ id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
{ id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
{ id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
{ id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
{
id: 10,
cid: 2,
title: "Суп Соютма из ягненка",
im: "<img class='img-fluid' src='i/im10.jpg'>",
price: 150
},
{ id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
{
id: 12,
cid: 3,
title: "Картофель по-домашнему",
im: "<img class='img-fluid' src='i/im12.jpg'>",
price: 45
}
],
};
var renderCats = defaultData.cats.reduce((acc, item) => {
acc[item.id] = item;
return acc;
}, {});
这里是全部代码https://codesandbox.io/s/affectionate-albattani-s0snm?file=/src/index.js
只是有一个错误,由于某种原因变量在数据文档中不可见
应为 0(“все”选项的值)
(selectedCat === 0
(selectedPrice === 0
const products = document.getElementById("products");
const catsSel = document.getElementById("cats");
const priceSel = document.getElementById("price");
document.addEventListener('change', handleChange)
function handleChange(e) {
const {target} = e;
if(target.id !== "cats" && target.id !== "price") {
return;
}
const selectedCat = parseInt(catsSel.value)
const selectedPrice = parseInt(priceSel.value)
const data = defaultData.products.filter((item) => {
return (
(selectedCat === 0 || item.cid === selectedCat) &&
(selectedPrice === 0 || item.price <= selectedPrice)
)
})
if (data.length !== 0) { render(data) }
}
function render(data) {
let output = '';
for (const item of data) {
output += item.im;
}
document.getElementById("render-box").innerHTML = output;
}
var defaultData = {
cats: [
{ id: 1, title: "Все" },
{ id: 2, title: "Завтраки" },
{ id: 3, title: "Первые блюда" },
{ id: 4, title: "Гарниры" }
],
products: [
{
id: 1,
cid: 1,
title: "Овсяная каша с фруктами",
im: "<img class='img-fluid' src='i/im1.jpg'>",
price: 30
},
{
id: 2,
cid: 1,
title: "Яичница глазунья с овощами на сковородке",
im: "<img class='img-fluid' src='i/im2.jpg'>",
price: 25
},
{
id: 3,
cid: 1,
title: "Сет азербайджанский завтрак",
im: "<img class='img-fluid' src='i/im3.jpg'>",
price: 10
},
{
id: 4,
cid: 4,
title: "Яичница с помидорами по-бакински",
im: "<img class='img-fluid' src='i/im4.jpg'>",
price: 28
},
{ id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
{ id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
{ id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
{ id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
{ id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
{
id: 10,
cid: 2,
title: "Суп Соютма из ягненка",
im: "<img class='img-fluid' src='i/im10.jpg'>",
price: 150
},
{ id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
{
id: 12,
cid: 3,
title: "Картофель по-домашнему",
im: "<img class='img-fluid' src='i/im12.jpg'>",
price: 45
}
],
};
var renderCats = defaultData.cats.reduce((acc, item) => {
acc[item.id] = item;
return acc;
}, {});
<div class="filter-box">
<div class="select-box">
<label class="filter-label">Категория</label>
<select id="cats" class="select-control">
<option value="0">Все</option>
<option value="1">Завтраки</option>
<option value="2">Первые блюда</option>
<option value="3">Гарниры</option>
</select>
</div><!-- /.select-box -->
<div class="price-select-box">
<label class="filter-label">Цена</label>
<select id="price" class="select-control">
<option value="0">Все</option>
<option value="30">До 30 грн</option>
<option value="50">До 50 грн</option>
<option value="100">До 100 грн</option>
<option value="150">До 150 грн</option>
</select>
</div><!-- /.price-select-box -->
</div><!-- /filter-box-->
<div id="render-box"></div>
代码中的问题是这样的:我想不出如何 return 选择“все”选项时的所有元素 我将非常感谢任何帮助
<div class="filter-box">
<div class="select-box">
<label class="filter-label">Категория</label>
<select id="cats" class="select-control">
<option value="0">Все</option>
<option value="1">Завтраки</option>
<option value="2">Первые блюда</option>
<option value="3">Гарниры</option>
</select>
</div><!-- /.select-box -->
<div class="price-select-box">
<label class="filter-label">Цена</label>
<select id="price" class="select-control">
<option value="0">Все</option>
<option value="30">До 30 грн</option>
<option value="50">До 50 грн</option>
<option value="100">До 100 грн</option>
<option value="150">До 150 грн</option>
</select>
</div><!-- /.price-select-box -->
</div>
<div id="products" class="products-box grid-box "> </div>
const products = document.getElementById("products");
const catsSel = document.getElementById("cats");
const priceSel = document.getElementById("price");
document.addEventListener('change', handleChange)
function handleChange(e) {
const {target} = e;
if(target.id !== "cats" && target.id !== "price") {
return;
}
const selectedCat = parseInt(catsSel.value)
const selectedPrice = parseInt(priceSel.value)
const data = defaultData.products.filter((item) => {
return (
(selectedCat === -1 || item.cid === selectedCat) &&
(selectedPrice === -1 || item.price <= selectedPrice)
)
})
render(data)
}
var defaultData = {
cats: [
{ id: 1, title: "Все" },
{ id: 2, title: "Завтраки" },
{ id: 3, title: "Первые блюда" },
{ id: 4, title: "Гарниры" }
],
products: [
{
id: 1,
cid: 1,
title: "Овсяная каша с фруктами",
im: "<img class='img-fluid' src='i/im1.jpg'>",
price: 30
},
{
id: 2,
cid: 1,
title: "Яичница глазунья с овощами на сковородке",
im: "<img class='img-fluid' src='i/im2.jpg'>",
price: 25
},
{
id: 3,
cid: 1,
title: "Сет азербайджанский завтрак",
im: "<img class='img-fluid' src='i/im3.jpg'>",
price: 10
},
{
id: 4,
cid: 4,
title: "Яичница с помидорами по-бакински",
im: "<img class='img-fluid' src='i/im4.jpg'>",
price: 28
},
{ id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
{ id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
{ id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
{ id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
{ id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
{
id: 10,
cid: 2,
title: "Суп Соютма из ягненка",
im: "<img class='img-fluid' src='i/im10.jpg'>",
price: 150
},
{ id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
{
id: 12,
cid: 3,
title: "Картофель по-домашнему",
im: "<img class='img-fluid' src='i/im12.jpg'>",
price: 45
}
],
};
var renderCats = defaultData.cats.reduce((acc, item) => {
acc[item.id] = item;
return acc;
}, {});
这里是全部代码https://codesandbox.io/s/affectionate-albattani-s0snm?file=/src/index.js
只是有一个错误,由于某种原因变量在数据文档中不可见
应为 0(“все”选项的值)
(selectedCat === 0
(selectedPrice === 0
const products = document.getElementById("products");
const catsSel = document.getElementById("cats");
const priceSel = document.getElementById("price");
document.addEventListener('change', handleChange)
function handleChange(e) {
const {target} = e;
if(target.id !== "cats" && target.id !== "price") {
return;
}
const selectedCat = parseInt(catsSel.value)
const selectedPrice = parseInt(priceSel.value)
const data = defaultData.products.filter((item) => {
return (
(selectedCat === 0 || item.cid === selectedCat) &&
(selectedPrice === 0 || item.price <= selectedPrice)
)
})
if (data.length !== 0) { render(data) }
}
function render(data) {
let output = '';
for (const item of data) {
output += item.im;
}
document.getElementById("render-box").innerHTML = output;
}
var defaultData = {
cats: [
{ id: 1, title: "Все" },
{ id: 2, title: "Завтраки" },
{ id: 3, title: "Первые блюда" },
{ id: 4, title: "Гарниры" }
],
products: [
{
id: 1,
cid: 1,
title: "Овсяная каша с фруктами",
im: "<img class='img-fluid' src='i/im1.jpg'>",
price: 30
},
{
id: 2,
cid: 1,
title: "Яичница глазунья с овощами на сковородке",
im: "<img class='img-fluid' src='i/im2.jpg'>",
price: 25
},
{
id: 3,
cid: 1,
title: "Сет азербайджанский завтрак",
im: "<img class='img-fluid' src='i/im3.jpg'>",
price: 10
},
{
id: 4,
cid: 4,
title: "Яичница с помидорами по-бакински",
im: "<img class='img-fluid' src='i/im4.jpg'>",
price: 28
},
{ id: 5, cid: 1, title: "Сырники со сметаной", im: "<img class='img-fluid' src='i/im5.jpg'>", price: 50},
{ id: 6, cid: 2, title: "Шпинатный крем-суп", im: "<img class='img-fluid' src='i/im6.jpg'>", price: 60},
{ id: 7, cid: 2, title: "Суп Пити", im: "<img class='img-fluid' src='i/im7.jpg'>", price: 118},
{ id: 8, cid: 2, title: "Борщ украинский", im: "<img class='img-fluid' src='i/im8.jpg'>", price: 68},
{ id: 9, cid: 2, title: "Суп Кюфта Бозбаш", im: "<img class='img-fluid' src='i/im9.jpg'>", price: 145},
{
id: 10,
cid: 2,
title: "Суп Соютма из ягненка",
im: "<img class='img-fluid' src='i/im10.jpg'>",
price: 150
},
{ id: 11, cid: 3, title: "Картофель фри", im: "<img class='img-fluid' src='i/im11.jpg'>", price: 35 },
{
id: 12,
cid: 3,
title: "Картофель по-домашнему",
im: "<img class='img-fluid' src='i/im12.jpg'>",
price: 45
}
],
};
var renderCats = defaultData.cats.reduce((acc, item) => {
acc[item.id] = item;
return acc;
}, {});
<div class="filter-box">
<div class="select-box">
<label class="filter-label">Категория</label>
<select id="cats" class="select-control">
<option value="0">Все</option>
<option value="1">Завтраки</option>
<option value="2">Первые блюда</option>
<option value="3">Гарниры</option>
</select>
</div><!-- /.select-box -->
<div class="price-select-box">
<label class="filter-label">Цена</label>
<select id="price" class="select-control">
<option value="0">Все</option>
<option value="30">До 30 грн</option>
<option value="50">До 50 грн</option>
<option value="100">До 100 грн</option>
<option value="150">До 150 грн</option>
</select>
</div><!-- /.price-select-box -->
</div><!-- /filter-box-->
<div id="render-box"></div>