动态创建 li 元素的替代方法

Alternative ways to dynamically create li elements

使用JavaScript,我需要像这样动态创建一个列表:

<ul id="list">
<li>2015</li>
<li>2016</li>
<li>2017</li>
<li>2018</li>
<li>2019</li>
<li>2020</li>
</ul>

“经典方案”(据我所知)是:

for (var i = 2015; i <= 2020; i++) {
  var li = document.createElement("li");
  li.innerHTML = i;
  list.appendChild(li);
}

完美运行。

但我想找到替代方案,在性能方面更好 - 解决方案,如果有的话(我想了解更多)。

所以我尝试了:

for (var i = 2015; i <= 2020; i++) {
  var el = "<li>" + i + "</li>";
  list.insertAdjacentHTML('beforeend', el);
  console.log(el);
  el += el;
}
<ul id="list"></ul>

for (var i = 2015; i <= 2020; i++) {
  var el = "<li>" + i + "</li>";
  list.innerHTML += el;
  console.log(el);
}
<ul id="list"></ul>

但在这两种情况下都是这样的结果:

<ul id="list">
<li>2015</li>
<li></li>
<li>2016</li>
<li></li>
<li>2017</li>
<li></li>
<li>2018</li>
<li></li>
<li>2019</li>
<li></li>
<li>2020</li>
<li></li>
</ul>
<li>2015<li>
<li>2016<li>
<li>2017<li>
<li>2018<li>
<li>2019<li>
<li>2020<li>

为什么那些空节点(<li></li>)?为什么只在 DOM 中?

在两者中您都添加了 "<li>" + i + "<li>" 而不是 "<li>" + i + "</li>"
缺少 slash 小东西,但是 用户代理 准备修复丢失的关闭...并且您的代码显示为双倍 li