JavaScript嵌套元素循环并附加bug?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript嵌套元素循环并附加bug?相关的知识,希望对你有一定的参考价值。
我有四个不同的元素,
<div id='div1'>One: </div>
<div id='div2'>Two: </div>
<span id='span1'>Test 1</span>
<span id='span2'> and 2</span>
我想通过这样做将两个span
元素附加到两个div
元素,
var div = document.querySelectorAll('div');
var span = document.querySelectorAll('span');
div.forEach(function(currentDiv){
span.forEach(function(currentSpan){
currentDiv.appendChild(currentSpan);
});
});
预期的输出是,
<div id='div1'>One:
<span id='span1'>Test 1</span>
<span id='span2'> and 2</span>
</div>
<div id='div2'>Two:
<span id='span1'>Test 1</span>
<span id='span2'> and 2</span>
</div>
但由于某种原因,span
元素不会附加到两个div
元素,但仅限于最后的div
。有什么理由,我该如何解决这个问题?
答案
正如我评论的那样,因为他们是同一个孩子,他们将是moved from one element到另一个。
你需要clone the span
's在每个div
得到两个。
这是一个例子
var div = document.querySelectorAll('div');
var span = document.querySelectorAll('span');
div.forEach(function(currentDiv, index){
span.forEach(function(currentSpan){
if (index == 0) {
currentDiv.appendChild(currentSpan);
} else {
var clone = currentSpan.cloneNode(true);
clone.id += index;
currentDiv.appendChild(clone);
}
});
});
<div id='div1'>One: </div>
<div id='div2'>Two: </div>
<span id='span1'>Test 1</span>
<span id='span2'> and 2</span>
另一答案
你需要克隆span
currentDiv.appendChild(currentSpan.cloneNode());
见:https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode
但在你的情况下,这将导致重复的id
属性。如果可能,请改用class
es。
另一答案
You would need to clone the nodes. Modified your code to clone each span before appending to div element. However you might also want to change the attributes value like id.
var div = document.querySelectorAll('div');
var span = document.querySelectorAll('span');
div.forEach(function(currentDiv){
span.forEach(function(currentSpan){
currentDiv.appendChild(currentSpan.cloneNode(true));
});
});
以上是关于JavaScript嵌套元素循环并附加bug?的主要内容,如果未能解决你的问题,请参考以下文章
循环遍历嵌套的 js 对象并使用 Jquery 使用自定义 html 附加 div
带有嵌套for循环的Javascript多维数组-无法正常工作
每秒记录一个嵌套循环元素至少一分钟?在 Javascript 中?
如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素