以下代码应克隆给定元素并在以下后插入:
function cloneMore(element) {
var newElement = element.cloneNode(true);
element.parentNode.insertBefore(newElement, element.nextSibling);
}
var addChoice = document.getElementById("add-choice")
addChoice.onclick = (function(){cloneMore(document.getElementById("choices").lastChild);})
html看起来像这样:
<ul id="choices">
<!-- form elements -->
</ul>
<p><a id="add-choice">Add another choice</a></p>
没有抛出异常,一切都在执行,但我看不到新元素。为什么呢?
答案 0 :(得分:2)
lastChild
选择所有节点类型,而不仅仅是Elements。所以你可能正在克隆一个TextNode \n
。
我猜你想要的是lastElementChild
。
function cloneMore(element) {
var newElement = element.cloneNode(true);
element.parentNode.insertBefore(newElement, element.nextSibling);
}
var addChoice = document.getElementById("add-choice")
addChoice.onclick = function() {
var choices = document.getElementById("choices");
cloneMore(choices.lastElementChild); // only Elements
console.log('lastChild type : ', choices.lastChild.nodeName);
}
<ul id="choices">
<li> choice </li>
</ul>
<p><a href="#" id="add-choice">Add another choice</a></p>