使用.html()来替换替换元素,有没有一种方法可以保留事件

Using .html() to replace replace element, is there a way to keep events?

本文关键字:替换 一种 方法 保留 事件 有没有 html 元素 使用      更新时间:2023-09-26

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

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

您应该使用live将事件永久绑定到绑定后进入DOM的元素。示例:

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

或者如果您使用的是jQuery 1.7+

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

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

http://api.jquery.com/detach/

var x=$('.element').destrict();

除.destrict()保留所有与已移除元素相关联的jQuery数据外,.destrict)方法与.remove()方法相同。当移除的元素稍后要重新插入DOM时,此方法非常有用。

Ben Alman的jQuery replaceText插件将允许您替换文本,如果您查看他的网站(http://benalman.com/projects/jquery-replacetext-plugin/),它特别提到了以下内容:

那么,为什么不设置.html(new_text)呢?虽然使用jQuery.html()方法是替换大型html结构中文本的最快方法之一,但当您这样做时,所有绑定到任何子元素的事件处理程序和引用都会丢失。这不好!

现在,如果您没有事件处理程序或对这些元素的引用,只需使用标准字符串替换来更新.html(),一切都会非常快!但是,如果您确实有事件处理程序和元素引用,您将需要一些"更智能"的东西。。喜欢这个插件。

相关文章: