【问题标题】:Push HTML Elements into an array to appendChild them later to a div which is also dynamically created将 HTML 元素推送到一个数组中,以便稍后将它们附加到一个 div 中,该 div 也是动态创建的
【发布时间】:2020-05-09 16:52:57
【问题描述】:

我有一些动态创建的元素。 我想将这些元素推送到一个数组中,以便能够循环所有它们并为每个元素分配一个属性。

问题是,如果我声明这样的数组var Array = [];,我无法将 HTML 元素推送到它。控制台日志说:

无法读取未定义的属性“push”

如果我像这样var Array; 声明数组,那么我无法将元素推送到它。

这就是我想要的。

var listgroupdiv  = document.createElement("div");
    var listgroupdiv1 = document.createElement("div");
    var listgroupdiv2 = document.createElement("div");


    var ListGroupClass = document.createAttribute("class");
    ListGroupClass.value = "row";
    listgroupdiv.setAttributeNode(ListGroupClass);
    var ListGroupClass1 = document.createAttribute("class");
    ListGroupClass1.value = "col-4";
    listgroupdiv1.setAttributeNode(ListGroupClass1);
    var ListGroupClass2 = document.createAttribute("class");
    ListGroupClass2.value = "list-group";
    listgroupdiv2.setAttributeNode(ListGroupClass2);
    var ListGroupID = document.createAttribute("id");
    var ListGroupRole = document.createAttribute("role");
    ListGroupID.value = "list-tab";
    ListGroupRole.value = "tablist";
    listgroupdiv2.setAttributeNode(ListGroupID);
    listgroupdiv2.setAttributeNode(ListGroupRole);

    var id_href = 0;
    var Array_A_Group = [];
    for(var b = 0; b < CommentArray.length; b++){
      if(CommentArray[b].indexOf("Parts:") > -1){
        var listgroupa        = document.createElement("a");
        var listgroupaClass   = document.createAttribute("class");
        var listgroupaID      = document.createAttribute("id");
        var listgroupaToggle  = document.createAttribute("data-toggle");
        var listgroupaHref    = document.createAttribute("href");
        var listgroupaRole    = document.createAttribute("role");
        var listgroupaAria    = document.createAttribute("aria-controls");

        listgroupaClass.value   = "list-group-item list-group-item-action";
        listgroupaID.value      = String(id_href);
        listgroupaToggle.value  = "list";
        listgroupaHref.value    = String(id_href);
        listgroupaRole.value    = "tab";
        listgroupaAria.value    = "home";
        listgroupa.setAttributeNode(listgroupaClass);
        listgroupa.setAttributeNode(listgroupaID);
        listgroupa.setAttributeNode(listgroupaToggle);
        listgroupa.setAttributeNode(listgroupaHref);
        listgroupa.setAttributeNode(listgroupaRole);
        listgroupa.setAttributeNode(listgroupaAria);

        var CommentText = document.createTextNode(CommentArray[b]);
        listgroupa.appendChild(CommentText);
        Array_A_Group[id_href].push(listgroupa); // <<-- Problem is in this line!
        
        id_href++;
      }
    }

我的目标是创建一个这样的 div:

<div class="row">
  <div class="col-4">
    <div class="list-group" id="list-tab" role="tablist">
      <a class="list-group-item list-group-item-action active" id="list-home-list" data-toggle="list" href="#list-home" role="tab" aria-controls="home">Home</a>
      <a class="list-group-item list-group-item-action" id="list-profile-list" data-toggle="list" href="#list-profile" role="tab" aria-controls="profile">Profile</a>
      <a class="list-group-item list-group-item-action" id="list-messages-list" data-toggle="list" href="#list-messages" role="tab" aria-controls="messages">Messages</a>
      <a class="list-group-item list-group-item-action" id="list-settings-list" data-toggle="list" href="#list-settings" role="tab" aria-controls="settings">Settings</a>
    </div>
  </div>

  <div class="col-8">
    <div class="tab-content" id="nav-tabContent">
      <div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-list">...</div>
      <div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-list">...</div>
      <div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-list">...</div>
      <div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-list">...</div>
    </div>
  </div>
</div>

具有唯一的 ID 和唯一的 href,然后为每个 &lt;a&gt; 添加一个 TextNode。

【问题讨论】:

  • 您好,欢迎来到 SO。您知道Element.classList 及其add 方法吗?
  • 天哪,这真的很酷。 :O

标签: javascript html arrays for-loop dynamic


【解决方案1】:

问题确实是这一行:

Array_A_Group[id_href].push(listgroupa);

数组对象的push方法是在数组本身上调用的。

例如

Array_A_Group.push(listgroupa);

按照您的方式,它尝试将对象推送到 Array_A_Group 内的数组中 在索引 id_href 处。由于此元素不存在,您会正确收到错误 Cannot read property 'push' of undefined

此外,您不需要保留额外的变量来跟踪数组的索引。将某些内容推送到数组后,它的索引将自动增加。

【讨论】:

  • 天哪,谢谢。这现在很明显了。出于某种原因,我试图从一开始就推动并创建了该变量。但这个变量实际上不仅仅是为了那个意图,我也只是在这里使用它。但你有权利。谢谢!
  • 没问题 Dr.Random - 很高兴我能帮上忙! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多