javascript - innerHTML 会影响性能吗?

标签 javascript html css

<分区>

我正在创建这个小应用程序,其想法是创建类似于留言板的东西。我正在使用 <li>元素作为每条消息的容器。任何时候用户提交新消息,它都会被添加到 <ul>列表。我的<li>元素被格式化为具有特定的样式。使用 innerHTML 方法是一个不错的选择吗?

目前我正在使用 Element.innerHTML 方法添加完整的代码块,一切正常。

const messageForm = document.querySelector("#message-form")
const messageTextarea = document.querySelector("#message-textarea");
const messageList = document.querySelector("#message-list");

const messageFormatted = messageText => {
  return `
  <li class="message-item">
    <img class="message-avatar" src="./icons/boy.png" alt="Username">
      <article class="message-content">
        <p>${messageText}</p>
      </article>
      <div class="message-actions">
        <img class="action-button" src="./icons/edit.png" alt="" width="22" height="22">
        <img class="action-button" src="./icons/delete.png" alt="" width="22" height="22">
      </div>
  </li>
  `;
}

messageForm.addEventListener("submit", (e) => {
  e.preventDefault();
  if (messageTextarea.value !== "") {
    messageList.innerHTML += messageFormatted(messageTextarea.value);
    messageTextarea.value = "";
    messageTextarea.focus();
  }
})

如你所见我的messageFormatted()函数返回一个模板,该模板最终将添加到 html 列表中。

我使用的是 Element.innerHTML正确吗?或者我应该使用 JavaScript DOM 方法,比如 document.createElement() , Element.setAttribute() ETC..?我的代码对性能有影响吗?而且,如果这段代码很好,如果要注入(inject)的代码更大,它仍然会很好吗?我知道最好的做法是尽可能将 JavaScript 与 View 分开。

最佳答案

你这样做很好,但我建议至少对我来说,使用一种更简洁的方式 Element.insertAdjacentHTML()

关于性能,Element.innerHTMLElement.insertAdjacentHTML() 差不多,但第一个是属性,第二个是方法。对于更复杂的如 MDN 上所述,您可以从 Element.insertAdjacentHTML() 结构中获得更多性能,请参阅我提供的链接。

关于安全性,我想提一下 Element.innerHTML 被很多人劝阻,因为它会破坏现有元素。

我的建议是改2行。

messageForm.addEventListener("submit", (e) => {
  e.preventDefault();
  if (messageTextarea.value !== "") {
    messageList.insertAdjacentHTML("afterbegin", messageFormatted(messageTextarea.value)); //use of insertAdjacentHTML
    messageTextarea.value = null; //empty
    messageTextarea.focus();
  }
})

Element.insertAdjacentHtml() on MDN

关于javascript - innerHTML 会影响性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740498/

相关文章:

html - float div不向左浮动

jQuery水平动画而不是垂直动画

javascript - 用 jQuery 替换部分页面

javascript - 如何在 jquery 中为父级的 sibling 设置左上角位置?

html - 换行文本周围的空白

javascript - 使用 JavaScript/Tabs/Iframe 重新加载动画

JavaScript 的类 Java 库/框架

javascript - 随机渐变背景色

javascript - Js/jQuery 创建父子元素

javascript - 在下拉菜单上切换三 Angular 形 ► ▲ jQuery