如何动态地将 3 个 html 元素附加到 .col-3 div?

Posted

技术标签:

【中文标题】如何动态地将 3 个 html 元素附加到 .col-3 div?【英文标题】:How can I append only 3 html elements to a .col-3 div dynamically? 【发布时间】:2021-08-19 01:45:48 【问题描述】:

我有我在js中做的addProducts函数,就是从一个产品的对象中获取细节。

function addProducts(product) 
let body = '';
body += "<div class='card' style='width:10rem;'";
body += "<img class='card-img-top' " + "src=" + product.img + " alt='card image'>";
body += "<div class='card-body'>";
body += "<h5 class='card-title'>" + product.name + "</h5>";
body += "<p class='card-text'>" + product.description + "</p>";
body += "<a href='#' class='btn btn-primary'>" + "معرفة المزيد" + "</a>";

return body;


但是,它带有一个 .card 容器,其中仅详细说明了一种产品。我怎么能像这个一样只添加 3 个产品,但是在 .col-3 div 中?

<div class="row">
                        <div class="col-sm">
//Product 1
//Product 2
//Product 3
                        </div>
                        <div class="col-sm">
//Product 1
//Product 2
//Product 3
                        </div>
                        <div class="col-sm">
//Product 1
//Product 2
//Product 3
                        </div>
            </div>

我添加产品以显示在我的容器中,ID 为#products-list,并带有一个在“nodeSelect”事件上触发的 for 循环

let $productsList = $('#products-list');

onNodeSelected: function(event, data) 
    var products = '';


    for (let i = 0; i < data.products.length; i++) 
        products += addProducts(data.products[i]);
    


    $productsList.html(products);
    $productsList.show();

【问题讨论】:

请提供一个最小的、可重现的示例:***.com/help/minimal-reproducible-example 最好还包括product 对象的示例。 我应该问一个更详细的新问题吗? @EsamOlwan 你可以更新/编辑这个。 单击更新/编辑按钮后,您可以将 HTML/CSS 和/或 JS 放在将解析代码的片段中,这允许您提供当前代码的结果问题。添加代码片段按钮将如下所示:&lt;&gt;。此外,它为社区提供了一个集中的代码片段,可以直接复制到他们的答案中,以便更轻松地调试您的问题,并可能帮助您获得更快、更有利的问题答案。 【参考方案1】:

考虑以下示例。

function addProducts(product) 
  // Create Card
  var card = $("<div>", 
    class: "card"
  ).css(
    width: "10rem"
  );
  $("<img>", 
    class: "card-img-top",
    src: product.img,
    alt: "Card Image"
  ).appendTo(card);
  var body = $("<div>", 
    class: "card-body"
  ).appendTo(card);
  $("<h5>", 
    class: "card-title"
  ).html(product.name).appendTo(body);
  $("<p>", 
    class: "card-text"
  ).html(product.description).appendTo(body);
  $("<a>", 
    href: "#",
    class: "btn btn-primary"
  ).html("معرفة المزيد").appendTo(body);
  // Return jQuery Object of populated Card
  return card;

// Define List as jQuery Object
var $productsList = $('#products-list');

// Event Action
onNodeSelected: function(event, data) 
  var products;
  // Clear current Product List
  $productsList.html("");
  // Iterate Object Data
  $.each(data.products, function(i, el)) 
    // i for the Index number and el for the object elements
    if (i % 3 == 0) 
      // use Modulus operator to wrap 3 items
      $("<div>", 
        class: "col-sm"
      ).appendTo($productList);
    
    $(".col-sm:last", $productList).append(addProduct(el));
  
  $productsList.show();

没有合适的例子,我无法测试代码。您必须自己进行测试。

更多关于模运算符:https://www.w3schools.com/js/js_arithmetic.asp

【讨论】:

以上是关于如何动态地将 3 个 html 元素附加到 .col-3 div?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中动态地将名称附加到数据属性

Javascript动态地将函数附加到对象

如何永久地将目录附加到PYTHONPATH?

在 Angular 中,我如何动态地将某些单词包装在另一个 html 元素中?

是否可以在 wordpress 中动态地将一个类附加到现有的 div 中?

r [追加项目到列表]动态地将项目附加到列表,优化以与管道#R一起使用