[英]How can i make 3 col in a row an 2 col in a row (bootstrap) with javascript?
I'm a beginner in JavaScript.我是 JavaScript 的初学者。 I've got a problem.
我有问题。 I need to create some elements and I need to put my API's data is these elements.
我需要创建一些元素,我需要把我的 API 数据就是这些元素。 But I want to create 3 cards (bootstraps) in my first row and 2 in my second row.
但我想在第一行创建 3 张卡片(引导程序),在第二行创建 2 张卡片。
But I think my loop isn't ok.但我认为我的循环不行。 Because all my data are on my fifth card.
因为我所有的数据都在我的第五张卡上。
That's my code HTML and JavaScript:这是我的代码 HTML 和 JavaScript:
HTML: 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: 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);
}
})
); );
That's the result on my inspector:这是我的检查员的结果:
Thx for your help谢谢你的帮助
If I understood correctly, you are only expecting to get 5 elements from your API and you want to put each of them in one column.如果我理解正确,您只希望从 API 中获得 5 个元素,并且您希望将它们中的每一个放在一列中。 If that's the case, you can put your column elements in an array and index them accordingly in your loop like so:
如果是这种情况,您可以将列元素放在一个数组中,并在循环中相应地对它们进行索引,如下所示:
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);
}
This code is going to break if your API returns more than 5 elements.如果您的 API 返回超过 5 个元素,则此代码将中断。 You could try something like
cols[i % 5].appendChild(indexCard);
你可以试试
cols[i % 5].appendChild(indexCard);
or consider other layout strategies.或考虑其他布局策略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.