Get the HTML of the element to clone with .innerHTML
, and then just make a new object by means of createElement()
...
var html = document.getElementById('test').innerHTML;
var clone = document.createElement('span');
clone.innerHTML = html;
In general, clone() functions must be coded by, or understood by, the cloner. For example, let's clone this: <div>Hello, <span>name!</span></div>
. If I delete the clone's <span>
tags, should it also delete the original's span tags? If both are deleted, the object references were cloned; if only one set is deleted, the object references are brand-new instantiations. In some cases you want one, in others the other.
In HTML, typically, you'll want anything cloned to be referentially self-contained. The best way to make sure these new references are contained properly is to have the same innerHTML rerun and re-understood by the browser within a new element. Better than working to solve your problem, you should know exactly how it's doing its cloning...
Full Working Demo:
function cloneElement() {
var html = document.getElementById('test').innerHTML;
var clone = document.createElement('span');
clone.innerHTML = html;
document.getElementById('clones').appendChild(clone);
}
<span id="test">Hello!!!</span><br><br>
<span id="clones"></span><br><br>
<input type="button" onclick="cloneElement();" value="Click Here to Clone an Element">