【问题标题】:JavaScript: for loop append element in several placesJavaScript:for循环在几个地方追加元素
【发布时间】:2015-09-29 23:47:58
【问题描述】:

我有一个 for 循环,需要将列表项附加到共享相同类名的两个菜单中。问题是,如果我引用它的索引或者如果我使用 I 的索引,它只会附加到一个或另一个,它只会附加到最后一项。

HTML

<ul class="menu">
<li>List One</li>
</ul>

<ul class="menu">
<li>List Two</li>
</ul>

JS

var menu    = document.querySelectorAll('.menu');
var listItem    = document.createElement('li');

for(i=0; i < menu.length; ++i){
    menu[i].appendChild(listItem);
}

这是 JS 的另一个奇怪的怪癖还是我错过了什么?

【问题讨论】:

  • 只有一个li,不能同时在两个地方……

标签: javascript


【解决方案1】:

应该是……

var menu = document.querySelectorAll('.menu');
var listItem = document.createElement('li');

for (var i=0; i < menu.length; ++i) {
    menu[i].appendChild(listItem.cloneNode());
    // or menu[i].appendChild(document.createElement('li'));
    // the point is, you'll have to create a new element and append it
}

就目前而言,您只需将同一元素从一个父项.menu 移动到另一个父项。引用the docs:

如果给定的孩子是对现有节点的引用 文档, appendChild() 将其从当前位置移动到新位置 位置(不需要从其父节点中删除节点 节点,然后将其附加到其他节点)。

【讨论】:

  • 就是这样,我要等10分钟才能接受你的回答
  • 这太棒了,我虽然克隆是特定于 jQuery 的。
  • @NicholasByDesign cloneNode 如果您没有returns 新节点元素的功能(显然您不需要它)。
  • @NicholasByDesign—jQuery 重新实现了几乎整个 DOM API,它是其设计的基础部分。
猜你喜欢
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 2012-05-28
  • 2016-07-19
  • 1970-01-01
  • 2013-04-06
相关资源
最近更新 更多