我有一个包含在HTML中的对象数组。我必须能够单击对象并显示产品的所有信息(id,标题,书籍,价格,卡路里等)。
做到这一点的最佳方法是什么?
摘要:
谢谢!
"use strict";
document.addEventListener('DOMContentLoaded', loadMeals);
const meals = [
{
id: 1,
title: 'Strawberry Salad with Poppy Seed Dressing',
img: 'Strawberry-Salad-with-Poppy-Seed-Dressing.jpg',
book: 1,
calories: 298,
servings: 3,
type: 'lunch',
price: 15,
cook: 'Jenny Jefferson',
quantity: 10,
},
{
id: 2,
title: 'Cashew Turkey Salad Sandwiches',
img: 'turkey-sandwich.jpg',
book: 2,
calories: 198,
servings: 2,
type: 'lunch',
price: 9,
cook: 'Jenny Jefferson',
quantity: 10
}
];
function loadMeals() {
let i = 0;
let id = 1;
let fillMealList = document.querySelector("#fillMealList");
for (let i = 0; i < meals.length; i++) {
let item = meals.find(item => item.id === id);
fillMealList.innerHTML +=
"<article>"+
"<h3>" + item.title + "</h3>"+
"<figure>"+
"<img src='images/" + item.img + "'" +">" +
"<figcaption>"+
"Meal by: " +"<span>" + item.cook + "</span>" +
"</figcaption>" +
"</figure>"+
"<div class='info'>"+
"<p>€ <span>" + item.price + "</span>" + "/pp" + "</p>" +
"<a href='#' class='addToCart'>Order</a>"+
"</div>"+
"</article>";
id++;
}
}
<div id="mealList">
<div class="flexcontainer" id="fillMealList"></div>
</div>
答案 0 :(得分:0)
在这里,您可以将onClick
侦听器附加到按钮上,该按钮将id
作为参数传递,然后可以轻松地从id
获取数据。
"use strict";
document.addEventListener('DOMContentLoaded', loadMeals);
const meals = [
{
id: 1,
title: 'Strawberry Salad with Poppy Seed Dressing',
img: 'Strawberry-Salad-with-Poppy-Seed-Dressing.jpg',
book: 1,
calories: 298,
servings: 3,
type: 'lunch',
price: 15,
cook: 'Jenny Jefferson',
quantity: 10,
},
{
id: 2,
title: 'Cashew Turkey Salad Sandwiches',
img: 'turkey-sandwich.jpg',
book: 2,
calories: 198,
servings: 2,
type: 'lunch',
price: 9,
cook: 'Jenny Jefferson',
quantity: 10
}
];
function getInfo(id){
meals.forEach( meal => {
if(meal.id === id){ console.log(meal) }
} )
}
function loadMeals() {
let i = 0;
let id = 1;
let fillMealList = document.querySelector("#fillMealList");
for (let i = 0; i < meals.length; i++) {
let item = meals.find(item => item.id === id);
fillMealList.innerHTML +=
"<article id={`item.id`} >"+
"<h3>" + item.title + "</h3>"+
"<figure>"+
"<img src='images/" + item.img + "'" +">" +
"<figcaption>"+
"Meal by: " +"<span>" + item.cook + "</span>" +
"</figcaption>" +
"</figure>"+
"<div class='info'>"+
"<p>€ <span>" + item.price + "</span>" + "/pp" + "</p>" +
"<a href='#' onclick='getInfo(" + item.id + ")' class='addToCart'>Order</a>"+
"</div>"+
"</article>";
id++;
}
}
<div id="mealList">
<div class="flexcontainer" id="fillMealList"></div>
</div>
答案 1 :(得分:-1)
您可以找到被点击文章的索引,并从具有该索引的数组中获取项目。
您可以尝试以下方式:
"use strict";
document.addEventListener('DOMContentLoaded', loadMeals);
const meals = [
{
id: 1,
title: 'Strawberry Salad with Poppy Seed Dressing',
img: 'Strawberry-Salad-with-Poppy-Seed-Dressing.jpg',
book: 1,
calories: 298,
servings: 3,
type: 'lunch',
price: 15,
cook: 'Jenny Jefferson',
quantity: 10,
},
{
id: 2,
title: 'Cashew Turkey Salad Sandwiches',
img: 'turkey-sandwich.jpg',
book: 2,
calories: 198,
servings: 2,
type: 'lunch',
price: 9,
cook: 'Jenny Jefferson',
quantity: 10
}
];
function loadMeals() {
let i = 0;
let id = 1;
let fillMealList = document.querySelector("#fillMealList");
for (let i = 0; i < meals.length; i++) {
let item = meals.find(item => item.id === id);
fillMealList.innerHTML +=
"<article class='objectP'>"+
"<h3>" + item.title + "</h3>"+
"<figure>"+
"<img src='images/" + item.img + "'" +">" +
"<figcaption>"+
"Meal by: " +"<span>" + item.cook + "</span>" +
"</figcaption>" +
"</figure>"+
"<div class='info'>"+
"<p>€ <span>" + item.price + "</span>" + "/pp" + "</p>" +
"<a href='#' class='addToCart'>Order</a>"+
"</div>"+
"</article>";
id++;
}
}
document.addEventListener('DOMContentLoaded', function(){
document.querySelectorAll('.objectP').forEach(function(el){
el.addEventListener('click', function(){
var nodes = Array.prototype.slice.call( document.getElementById('fillMealList').children );
var idx = nodes.indexOf(this);
console.clear(); // clears the console
console.log(meals[idx])
});
})
});
<div id="mealList">
<div class="flexcontainer" id="fillMealList"></div>
</div>