javascript - 使用 javaScript 根据 id 显示数组的对象属性
问题描述
我是 javaScript 的新手,并使用 javaScript 开发客户端购物车。我已经在单独的 DIVS 和循环锚标记中显示了来自数组的产品详细信息。我要做的是,当单击锚标记(添加到购物车)时,只有该特定产品应显示在单独的 div 中。单击每个按钮时,如何将产品 id(id1) 传递给 href?任何人都可以给出任何想法吗?我真的很感谢你的努力。这是我的代码示例。
var cakeDetails = [
{
id1: "1",
cakeimage: "images/cup3.png",
cakename: "White chocolate cheese cake",
price: "£25"
},
{
id1: "2",
cakeimage: "images/cup2.png",
cakename: "Angel cup cake",
price: "£1"
},
{
id1: "3",
cakeimage: "images/cup5.png",
cakename: "Lemon cup cake",
price: "£1"
}
];
window.addEventListener('load', function () {
var container = "<div class='productMainContainer'>";
for (var i = 0; i < cakeDetails.length; i++) {
container+="<div class='productContainers'>";
container+="<div class='productImgContainer'>";
container+='<img src="'+cakeDetails[i].cakeimage+'">';
container+="</div>";
container+="<div class='productName'>"+cakeDetails[i].cakename+"</div>";
container+="<div class='productPrice'>"+cakeDetails[i].price+"</div>";
container+="<a href=''>"+"Add to cart"+"</a>";
container+="</div>";
}
container+="</div>";
document.getElementById("productDisplay").innerHTML = container;
});
<div class="productOuterContainer" id="productDisplay"></div>
解决方案
您可以使用具有onclick
调用函数的属性的按钮来使产品出现在单独的 div 中。该按钮应该有一个包含产品 ID 的属性,以便在onclick
调用事件处理程序时,您可以从作为参数传递给由onclick
.
<button data-id="${detail.id1}" onclick="addToCart(this)">
${'Add to cart'}
</button>`
我们将蛋糕详细信息的 ID 插入到我们在以下函数中生成的 HTML 中。
var cakeDetails = [
{
id1: "1",
cakeimage: "images/cup3.png",
cakename: "White chocolate cheese cake",
price: "£25"
},
{
id1: "2",
cakeimage: "images/cup2.png",
cakename: "Angel cup cake",
price: "£1"
},
{
id1: "3",
cakeimage: "images/cup5.png",
cakename: "Lemon cup cake",
price: "£1"
}
];
function getCakeDetailForId(id) {
for(const detail of cakeDetails) {
if (detail.id1 === id) return detail;
}
}
function addToCart(anchor) {
const cakeId = anchor.getAttribute('data-id');
const cakeDetail = getCakeDetailForId(cakeId);
if (cakeDetail) {
const container = productContainerFromCakeDetail(cakeDetail);
document.getElementById("cartDisplay").innerHTML = container;
} else {
console.log(`couldn't find cake detail for #${cakeId}`);
}
}
function productContainerFromCakeDetail(detail, addToCart = false) {
return `
<div class="productContainers">
<div class="productImgContainer">
<img src="${detail.cakeimage}">
</div>
<div class="productName">${detail.cakename}</div>
<div class="productPrice">${detail.price}</div>
${addToCart ? `<button data-id="${detail.id1}" onclick="addToCart(this)">
${'Add to cart'}
</button>` : ''}
</div>
`;
}
function productMainContainer() {
return `
<div class='productMainContainer'>
${cakeDetails.map(detail => productContainerFromCakeDetail(detail, addToCart)).join('\n')}
</div>
`;
}
window.addEventListener('load', function () {
document.getElementById("productDisplay").innerHTML = productMainContainer();
});
<aside style="float:right">
<h2>Last Product Added</h2>
<div id="cartDisplay">
<!-- Last product added to cart -->
</div>
</aside>
<h2>All Products</h2>
<div class="productOuterContainer" id="productDisplay">
<!-- List of products -->
</div>
推荐阅读
- php - 将 Wikibase 扩展添加到 MediaWiki 安装时遇到问题
- bash - 如何从 bash 遍历 sqlite db 中的行?
- node.js - 将 curl oauth 转换为 axios/javascript 的困难
- javascript - abybody 知道如何通过单击选定对象外部来取消选择 Jquery Selectable 吗?
- javascript - 未处理的拒绝(RangeError):使用 tf.models.modelFromJSON 时,Float32Array 的字节长度应为 4 的倍数
- database - 仅查找具有两个嵌入文档的文档
- c++ - 在 QT [C++] 中实现线程的几个错误
- python - 我将如何解决它 - /account/signup/ name 'SignUpForm' 处的 NameError 未定义
- python - 如何加入最后一个字符为“\”的文件的多行
- android - 博览会弹出后构建 android 应用程序时出错 > 没有方法签名:build_*.android() 适用于参数类型