简体   繁体   English

如何使用 javascript 连续制作 3 列和 2 列(引导程序)?

[英]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:这是我的检查员的结果:

Result of my code我的代码的结果

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM