【发布时间】:2016-05-17 13:46:09
【问题描述】:
我在 HTML 中创建了 5 个 div's,我想将它们全部添加到我在 JavaScript 中创建的 div 包装器中。我尝试通过 for-in 循环遍历 5 div's,然后将 div 添加为 wrapper 的子代。
由于某种原因,for 循环改变了 5 个div's 的顺序,并且没有将它们全部附加到wrapper 中。如何使用 JavaScript 将所有 div's 添加到 wrapper,保持 (HTML) 顺序?
(请不要发布 JQuery 答案,因为这不是问题所在。我想要 JavaScript 答案只。)
var wrapper = document.createElement('div'),
myClass = document.getElementsByClassName('myClass');
myClass[0].parentElement.appendChild(wrapper);
wrapper.id = 'wrapper';
for (var key in myClass) {
if (!myClass.hasOwnProperty(key)) continue;
wrapper.appendChild(myClass[key]);
}
#wrapper {
border: 2px solid green;
color: brown;
}
<div class="myClass">First</div>
<div class="myClass">Second</div>
<div class="myClass">Third</div>
<div class="myClass">Fourth</div>
<div class="myClass">Fifth</div>
【问题讨论】:
-
If you want order, don't iterate using
for...in!!!。还有就是合集是live的问题。 -
此外,HTMLCollections 除了其成员的索引之外还有其他可枚举属性(例如 item、namedItem 和 length以及拥有它们的元素的 ID)。
-
@RobG 幸运的是这些是继承的属性,所以
hasOwnProperty检查避免了这个额外的问题。 -
@Oriol — length 和元素 ID 不会被继承,尽管浏览器之间的可枚举性不同。
标签: javascript