javascript - 如何使用 javascript 连续制作 3 列和 2 列(引导程序)?
问题描述
我是 JavaScript 的初学者。我有问题。我需要创建一些元素,我需要把我的 API 数据就是这些元素。但我想在第一行创建 3 张卡片(引导程序),在第二行创建 2 张卡片。
但我认为我的循环不行。因为我所有的数据都在我的第五张卡上。
那是我的代码 HTML 和 JavaScript:
HTML:
</section>
<section class="container">
<div class="row">
<div id="colCam1" class="col-12 col-lg-4"></div>
<div id="colCam2" class="col-12 col-lg-4"></div>
<div id="colCam3" class="col-12 col-lg-4"></div>
</div>
<div class="row">
<div id="colCam4" class="col-12 col-lg-4"></div>
<div id="colCam5" class="col-12 col-lg-4"></div>
</div>
</section>
JS:
fetch("http://localhost:3000/api/cameras")
.then((response) =>
response.json().then ((data) => {
console.log(data);
for(i=0; i < data.length; i++) {
let indexCard = document.createElement("div");
let indexImg = document.createElement("img");
let indexBodyCard = document.createElement("div");
let indexProductTitle = document.createElement("h5");
let indexProductPrice = document.createElement("p");
colCam1.appendChild(indexCard);
colCam2.appendChild(indexCard);
colCam3.appendChild(indexCard);
colCam4.appendChild(indexCard);
colCam5.appendChild(indexCard);
indexCard.classList.add("card");
indexCard.appendChild(indexImg);
indexImg.classList.add("card-img-top");
indexCard.appendChild(indexBodyCard);
indexBodyCard.classList.add("card-body");
indexBodyCard.appendChild(indexProductTitle)
indexProductTitle.classList.add("card-title");
indexBodyCard.appendChild(indexProductPrice);
indexProductPrice.classList.add("card-text");
indexProductTitle.innerHTML = data[i].name;
indexProductPrice.innerHTML = parseInt(data[i].price) + " €";
indexImg.setAttribute("src", data[i].imageUrl);
}
})
);
这是我检查员的结果:
谢谢你的帮助
解决方案
如果我理解正确,您只希望从您的 API 中获得 5 个元素,并且您希望将每个元素放在一个列中。如果是这种情况,您可以将列元素放在一个数组中,并在循环中相应地对它们进行索引,如下所示:
const cols = [colCam1, colCam2, colCam3, colCam4, colCam5]
for(i=0; i < data.length; i++) {
let indexCard = document.createElement("div");
let indexImg = document.createElement("img");
let indexBodyCard = document.createElement("div");
let indexProductTitle = document.createElement("h5");
let indexProductPrice = document.createElement("p");
cols[i].appendChild(indexCard);
indexCard.classList.add("card");
indexCard.appendChild(indexImg);
indexImg.classList.add("card-img-top");
indexCard.appendChild(indexBodyCard);
indexBodyCard.classList.add("card-body");
indexBodyCard.appendChild(indexProductTitle)
indexProductTitle.classList.add("card-title");
indexBodyCard.appendChild(indexProductPrice);
indexProductPrice.classList.add("card-text");
indexProductTitle.innerHTML = data[i].name;
indexProductPrice.innerHTML = parseInt(data[i].price) + " €";
indexImg.setAttribute("src", data[i].imageUrl);
}
如果您的 API 返回超过 5 个元素,此代码将会中断。您可以尝试类似cols[i % 5].appendChild(indexCard);
或考虑其他布局策略。
推荐阅读
- html - 如何在 Emacs 的 Org 模式下在 Source Block 的“#+RESULTS”预览输出周围添加“#+ATTR_HTML”?
- javascript - 如何在 React 中重新加载表中的数据
- azure - Azure VMSS 自定义脚本扩展错误 - 无法下载脚本文件
- swift - 在特定内存地址打印对象描述
- flutter - Flutter permission_handler 重新请求权限
- php - 获取数据集合并按开始和结束日期限制它们
- javascript - Firebase 错误:Function CollectionReference.doc() 要求其第一个参数为非空字符串类型,但它是:true"
- qt - 我如何在 qt 应用程序中读取 HDMI 输入(比如来自另一个视频源),该应用程序打算在 Android 设备(amlogic)中运行
- python - 使用 Keras 训练具有两个不同输出的相同模型
- python - struct.pack 比它的部分长?