Вы создаете бесконечную рекурсию!
function duplicate()
{
var div = duplicate("div");
Функция вызывает себя снова и снова. Используйте cloneNode()
:
HTML:
<div id="duplicater0">
duplicate EVERYTHING INSIDE THIS DIV
</div>
JavaScript:
var i = 0;
function duplicate() {
var original = document.getElementById('duplicater' + i);
var clone = original.cloneNode(true); // "deep" clone
clone.id = "duplicater" + ++i; // there can only be one element with an ID
clone.onclick = duplicate; // event handlers are not cloned
original.parentNode.appendChild(clone);
}
Рабочая ДЕМО
или без идентификаторов:
function duplicate() {
var clone = this.cloneNode(true); // "deep" clone
clone.id = ""; // there can only be one element with an ID
clone.onclick = duplicate; // event handlers are not cloned
this.parentNode.appendChild(clone);
}
Обновление:
Если вы хотите клонировать div по нажатию кнопки, вы можете использовать немного другую версию:
HTML:
<button id="button" onclick="duplicate()">Click me</button>
<div id="duplicater">
duplicate EVERYTHING INSIDE THIS DIV
</div>
JavaScript:
var i = 0;
var original = document.getElementById('duplicater');
function duplicate() {
var clone = original.cloneNode(true); // "deep" clone
clone.id = "duplicater" + ++i;
// or clone.id = ""; if the divs don't need an ID
original.parentNode.appendChild(clone);
}
Если вы не в форме, вы должны использовать <button>
вместо <input type="button">
.
Рабочая ДЕМО 2