简体   繁体   English

如何在不使用innerHTML的情况下使用纯JavaScript添加大量HTML

[英]How to add large amount of HTML using pure javascript without innerHTML

I'm trying to determine how to append a large amount of HTML to an existing element in the DOM. 我正在尝试确定如何将大量HTML附加到DOM中的现有元素。 Due to certain constraints, I can't use innerHTML. 由于某些限制,我不能使用innerHTML。 Supposedly it's bad to use innerHTML as it doesn't treat things like an object and reloads the DOM or something. 据说使用innerHTML不好,因为它不会像对象一样对待对象并重新加载DOM或其​​他内容。 I know jquery's .append() is an option, as it supposedly does things properly, but I want to use pure javascript; 我知道jquery的.append()是一个选项,因为它据说可以正确执行操作,但是我想使用纯JavaScript; I've read a few things saying jQuery shouldn't be used anymore. 我读过几句话说jQuery不应该再使用了。 If there are any other libraries, or if jQuery is a valid option, then I'm fine with using it. 如果还有其他库,或者jQuery是有效的选项,那么我可以使用它。 I'm just trying to do/learn things the "right way". 我只是想以“正确的方式”做事/学习事情。

Here's how I've been doing it. 这就是我一直在做的事情。 The function takes some info and creates a table row. 该函数获取一些信息并创建一个表行。 This seems like a bit much to do something so simple... 做这么简单的事情似乎有点麻烦...

function flyoutAddTicket(caseID, ticketNumber, accountName, subject, tktStatus, priority, createdDate){
  //Create table row that will be inserted into the flyout table
  var newtr = document.createElement("tr");
      newtr.id = "sfoFlyout_Ticket_" + caseID;
      newtr.className = "sfoFlyout_Ticket";

  // Create elements that will be inserted into the list item
  var tdOwn = document.createElement("td");
      tdOwn.id = "sfoFlyout_Ticket_" + caseID + "_OwnButton";
    var btnOwn = document.createElement("button");
        btnOwn.className = "sfoFlyout_own sfo_button";
        btnOwn.value = caseID;
        btnOwn.textContent = (easterEggs.pwnButton) ? "Pwn" : "Own";
  var tdTicketNumber = document.createElement("td");
      tdTicketNumber.id = "sfoFlyout_Ticket_" + caseID + "_TicketNumber";
    var aTicketNumber = document.createElement("a");
        aTicketNumber.textContent = ticketNumber;
        aTicketNumber.href = "/" + caseID;
  var tdAccountName = document.createElement("td");
      tdAccountName.id = "sfoFlyout_Ticket_" + caseID + "_Client";
      tdAccountName.textContent = accountName;
  var tdSubject = document.createElement("td");
      tdSubject.id = "sfoFlyout_Ticket_" + caseID + "_Subject";
    var aSubject = document.createElement("a");
        aSubject.textContent = subject;
        aSubject.href = "/" + caseID;
  var tdStatus = document.createElement("td");
      tdStatus.id = "sfoFlyout_Ticket_" + caseID + "_Status";
      tdStatus.textContent = tktStatus;
  var tdPriority = document.createElement("td");
      tdPriority.id = "sfoFlyout_Ticket_" + caseID + "_Priority";
      tdPriority.className = "sfoFlyout_Ticket_Priority";
      tdPriority.textContent = priority;

  // Append elements to table row
  if (sfoOptions.ownButton){ newtr.appendChild(tdOwn); }
  tdOwn.appendChild(btnOwn);
  newtr.appendChild(tdTicketNumber);
    tdTicketNumber.appendChild(aTicketNumber);
  newtr.appendChild(tdAccountName);
  newtr.appendChild(tdSubject);
    tdSubject.appendChild(aSubject);
  newtr.appendChild(tdStatus);
  newtr.appendChild(tdPriority);

  // Assign user preferred colors/borders
  for (var pref in preferences.clients){
    // Set border thickness/colors
    if (preferences.clients[pref].name == "border"){
      newtr.style.borderBottomWidth = sfoOptions.borderThickness + "px";
      newtr.style.borderColor = preferences.clients[pref].color;
    }
    // Set row colors
    if (preferences.clients[pref].name == accountName){
      newtr.style.backgroundColor = preferences.clients[pref].color;
    }
  }

  //Add list item to the flyout
  flyoutTable.appendChild(newtr);
}

you can push the created elements into a list them loop through the list and then inside the for loop 您可以将创建的元素推入列表,它们在列表中循环,然后在for循环中

document.getElementById('yourElement').appendChild(elementYouCreated)

or use appendChild() on your created elements 或在创建的元素上使用appendChild()

elementYouCreated.appendChild(itsChildYouCreated)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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