当你 remove() 一个元素并 append() 它在别处时,jQuery 会发生什么?
似乎这些事件没有挂钩 - 好像您只是插入新的 html(我猜这就是发生的事情)。但我的代码也可能有错误 - 所以我只是想在继续之前验证这种行为。
如果是这种情况 - 是否有任何简单的方法可以将事件重新连接到 HTML 的那部分,或者有一种不同的方法来移动元素而不会首先丢失事件。
当你 remove() 一个元素并 append() 它在别处时,jQuery 会发生什么?
似乎这些事件没有挂钩 - 好像您只是插入新的 html(我猜这就是发生的事情)。但我的代码也可能有错误 - 所以我只是想在继续之前验证这种行为。
如果是这种情况 - 是否有任何简单的方法可以将事件重新连接到 HTML 的那部分,或者有一种不同的方法来移动元素而不会首先丢失事件。
jQuery detach()函数与remove()相同,但在它返回的对象中保留了事件处理程序。如果您必须删除该项目并将其与所有可以使用的东西一起放置在其他地方。
var objectWithEvents = $('#old').detach();
$('#new').append(objectWithEvents);
在此处查看 API 文档:http: //api.jquery.com/detach/
是的,jQuery 的方法remove()
是取消绑定与 jQuery 自己绑定的所有内容bind
(以防止内存泄漏)。
但是,如果您只想在 DOM 中移动某些内容,则不必先移动remove()
它。随心所欲append
,事件绑定将继续存在:)
例如,将其粘贴到此页面上的 firebug 中:
$('li.wmd-button:eq(2)').click(function(){ alert('still here!') }).appendTo(document.body)
现在向下滚动到此页面的底部,然后单击现在埋在 SO 页脚下的小地球图标。你会得到alert
. 这一切都是因为我注意不要remove
先这样做。
使用 jQuery1.3.1 live() 绑定事件,你不必担心这个..
更新:现在不推荐使用实时事件,但您可以从 $(document).on() 获得相同的效果。