使用.html()替换replace元素,有没有办法保存事件?

时间:2012-02-17 18:28:50

标签: javascript jquery html

我正在使用.html()来替换jQuery元素的内部html。据我所知,删除了正在使用html的父元素内部的原始元素。如果您维护对该原始元素的javascript引用,则可以稍后重新插入,但缺少其事件。

有没有办法通过分离.detach()原始元素进行替换,以便它仍然保留其事件而不是删除它?

3 个答案:

答案 0 :(得分:3)

你应该使用live来永久地绑定事件,将事件绑定到绑定后进入DOM的元素。例如:

$('.element').live('click', function(){
   ....
});

或者如果你正在使用jQuery 1.7 +

$('.element').on('click', function(){
    ....
});

答案 1 :(得分:2)

如果您使用的是jQuery 1.4+,则可以使用.detach()方法。

http://api.jquery.com/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(),一切都将超快!但是如果你有事件处理程序和元素引用,你需要一些“更聪明”的东西......比如这个插件。