Code has been added to clipboard!

Using jQuery .clone(): What Does a Deep Copy Mean and How to Make One

Reading time 1 min
Published Jan 18, 2018
Updated Oct 2, 2019

jQuery clone: Main Tips

  • The .clone() jQuery method makes a deep copy of the specified elements.
  • A deep copy contains not only the elements themselves, but also all their children elements and text nodes.

How to Clone Elements

The .clone() jQuery method clones the selected elements by creating a deep copy of them. Try clicking the button in the example multiple times and compare the results:

Example
$("button").click(() => {
    $("p").clone().appendTo("div");
});

To make jQuery clone elements, you will need to use this syntax:

$(selector).clone(withEventsAndData, deepWithEventsAndData);

Both parameters are optional. They also both have boolean values.

  • withEventsAndData specifies whether the data and event handlers associated with the element should be copied as well. It is false by default.
  • deepWithEventsAndData specifies whether the data and event handlers of the selected element's children should be copied as well. Their values match that of the first element by default.

Note: avoid making jQuery clone elements that have ID attributes. Dublicating them will casue issues, as ID attributes must be unique for identification purposes.

Learn jQuery
Introduction
Selectors
Events
Event Methods
Download
Callback
Chaining
Get and Set
Add Element
Remove Element
Traverse
Parent
Children
Sibling Traverse
Filtering
jQuery AJAX
Effects
Show and Hide
Fade Effect
Slide Effect
Animate Effect
Manipulate CSS
Width and Height
.addClass()
.after()
.animate()
.append()
.appendTo()
.attr()
.before()
.bind() (deprecated)
.blur()
.change()
.click()
.clone()
.css()
.dblclick()
.delay()
.delegate() and .undelegate() (deprecated)
.detach()
.empty()
.end()
.error() (deprecated)
.fadeIn()
.fadeOut()
.fadeTo()
.fadeToggle()
.finish()
.focus()
.focusIn()
.focusOut()
.hasClass()
.height()
.hide()
.hover()
.html()
.innerHeight()
.innerWidth()
.insertAfter()
.insertBefore()
.keypress()
.keyup()
.live() and .die() (deprecated)
.load() (deprecated)
.mousedown()
.mouseenter()
.mouseleave()
.mousemove()
.mouseout()
.mouseover()
.mouseup()
.off()
.offset()
.offsetParent()
.on()
.one()
.outerHeight()
.outerWidth()
.position()
.prepend()
.prependTo()
.prop()
.proxy()
.queue()
.ready()
.remove()
.removeAttr()
.removeClass()
.removeProp()
.replaceAll()
.replaceWith()
.resize()
.scroll()
.scrollLeft()
.scrollTop()
.show()
.slideDown()
.slideToggle()
.slideUp()
.stop()
.submit()
.text()
.toggle()
.toggleClass()
.trigger()
.triggerHandler()
.unbind() (deprecated)
.unload() (deprecated)
.unwrap()
.val()
.width()
.wrap()
Event Properties
event.currentTarget
event.preventDefault()
event.relatedTarget
event.stopImmediatePropagation()
event.stopPropagation()
event.target
event.timeStamp
event.type
event.which
jQuery .find()
jQuery .keydown()
jQuery.noConflict()
pageY and pageX