javascript - Javascript 中的 array_chunk 和 For 循环,用于在一个 div 中附加多个元素

标签 javascript jquery html

我有一个 ajax 帖子,它从 Controller 获取数据,我想做的是为 array_chunk 的每个元素创建一个 div,并将每个单独 block 的所有 div 附加到一个 div 中(请参见下面的 html)。

success: function(data) {
     var posts = data['data'];
     var postsCount = data['per_page'];
     var frag = document.createDocumentFragment();
     var eachRow = document.createDocumentFragment();
     var n,j,tempArray,chunk = 3;

        for (n=0,j=posts.length; n<j; n+=chunk) {
            tempArray = posts.slice(n,n+chunk); 

                  // console.log(tempArray); [object],[object],[object] x5

             for(i=0; i < tempArray.length; i++){
                 frag.appendChild(postElem(tempArray));
             }

            var eachRow = document.createElement('div');
            eachRow.className = "row eachRow";
            eachRow.appendChild(frag);
         }
    document.getElementById('content').appendChild(eachRow);
}
  • 此代码正在生成:

    <div class="row eachRow">
       <div class="eachPost>_</div> 
    </div>
    <div class="row eachRow">
       <div class="eachPost>_</div> 
    </div>
    <div class="row eachRow">
       <div class="eachPost>_</div> 
    </div>
    
  • 我想要实现的目标

    <div class="row eachRow">
       <div class="eachPost>_</div>
       <div class="eachPost>_</div>
       <div class="eachPost>_</div>
    </div>
    <div class="row eachRow">
       <div class="eachPost>_</div>
       <div class="eachPost>_</div>
       <div class="eachPost>_</div>
    </div>
    

顺便说一句,函数 postElem() 用于附加 eachPost 中的所有其他内容。

function postElem(posts){
   var eachPost = document.createElement('div');
   eachPost.className = "col-md-4 eachPost";

       //and a big chunk of code that finally appends into `eachPost`.

  return eachPost;
}

请注意,dataposts 是对象。 console.log(posts) 正在记录 [对象、对象、对象、对象、对象、对象、对象...]

0:对象 1:对象 2:对象 3:对象 4:对象...

0: Object:
     ->name
     ->email // (etc.. It's user table)

     ->posts // (user hasMany() post // eloquent relationship)
         ->created_at
         ->id
         ->comments
              ->id
              ->body
              ->created_at (etc..)

      ->user_profile (also eloquent relationship)
           ->photo
           ->about 

最佳答案

试试这段代码。

var data = ["Post 1", "Post 2", "Post 3", "Post 4", "Post 5", "Post 6", "Post 7", "Post 8", "Post 9 ", "后 10"]

var groupedData = [];
 var groupIndex = 0;
 $.each(data, function (index, post) {
     if (index == 0) {
         groupedData[groupIndex] = [];
     }
     else if (index % 3 == 0) {
         groupIndex++;
         groupedData[groupIndex] = [];
     }
     groupedData[groupIndex].push(post);
 });
 $.each(groupedData, function (index, value) {
     var eachRow = document.createElement('div');
     eachRow.className = "row eachRow";
     $.each(value, function (postIndex, post) {
         var postElement = document.createElement('div');
         postElement.className = "eachPost";
         eachRow.appendChild(postElement);
     });

     document.getElementById('content').appendChild(eachRow);
 });

解释

您需要将数据数组拆分为多个数组,每个数组最多包含 3 个帖子。现在您可以轻松地将这些元素附加到每个 row div。

更新

var data = [];
for (var i = 0; i < 10; i++) {
    var obj = {};
    obj.name = "Name " + i;
    obj.posts = [];
    for (var j = 0; j < 5; j++) {
        var post = { id: j };
        obj.posts.push(post);
    }

    data.push(obj);
}

这是你的数据吗?

关于javascript - Javascript 中的 array_chunk 和 For 循环,用于在一个 div 中附加多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33405725/

相关文章:

javascript - 为 window.open 设置新的图标

Javascript继承扩展方法技巧

javascript - 如果端口范围太宽,Node 中的端口扫描将不起作用

javascript - 如何限制定期向其中添加消息的 DIV 中的文本量?

javascript - 阿拉伯文字不显示,但字符 الÙ...Ù...Ù„Ù 显示

javascript - AngularJS:我的 Accordion 展开,但不折叠

javascript - jquery ui Accordion 单击一次展开但第二次单击不折叠

jquery - jQuery 中的可折叠表格

c# - 如何从 HTML 提交按钮调用 ASP.NET CORE WEB API 3.1

Javascript:如何在函数中通过变量名获取元素?