Are event listeners in jQuery removed automatically when you remove the element using .html()?
In jQuery if we use .remove()
for removing some element, then all bound events and jQuery data associated with the elements are r开发者_JAVA技巧emoved.
But what happens if we "remove" the elements with .html()
?
Do we need to unbind all the elements prior to change any html for avoiding memory leaks?
Yes, they will be removed. jQuery will clean up events etc related to the removed elements. It will NOT copy events if you do something like $(elm1).html($elm2.html())
Yeah, they will be removed even when you use html()
. The jQuery source code confirms it.
Just to expand a bit:
.remove()
,.html()
,.empty()
, etc - all remove listeners.detach()
does not remove listeners.clone()
has parameters letting you decide if data/listeners are copied
So if you want to retain listeners, use .detach()
.
精彩评论