我正在使用.html()
来替换jQuery元素的内部html。据我所知,删除了正在使用html的父元素内部的原始元素。如果您维护对该原始元素的javascript引用,则可以稍后重新插入,但缺少其事件。
有没有办法通过分离.detach()
原始元素进行替换,以便它仍然保留其事件而不是删除它?
答案 0 :(得分:3)
你应该使用live来永久地绑定事件,将事件绑定到绑定后进入DOM的元素。例如:
$('.element').live('click', function(){
....
});
或者如果你正在使用jQuery 1.7 +
$('.element').on('click', function(){
....
});
答案 1 :(得分:2)
如果您使用的是jQuery 1.4+,则可以使用.detach()方法。
var x = $('。element')。detach();
.detach()方法与.remove()相同,除了.detach()保留与删除的元素关联的所有jQuery数据。当删除的元素稍后要重新插入DOM时,此方法很有用。
答案 2 :(得分:0)
Ben Alman的jQuery replaceText插件将允许您替换文本,如果您检查他的网站(http://benalman.com/projects/jquery-replacetext-plugin/),它具体提到以下内容:
那么,为什么不设置.html(new_text)? 虽然使用jQuery .html()方法是替换大型HTML结构中文本的最快方法之一,但是当您执行此操作时,所有绑定到任何子元素的事件处理程序和引用都将丢失。这不好!
现在,如果您没有事件处理程序或对这些元素的引用,只需使用标准字符串替换更新.html(),一切都将超快!但是如果你有事件处理程序和元素引用,你需要一些“更聪明”的东西......比如这个插件。