在replaceWith之后没有注册的事件

当我replaceWith一个元素replaceWith一个DOM,然后replaceWithreplaceWith它时,注册到它的事件不会触发。 我需要保持完整的事件。

这是我的Javascript:

 var replacement = $(document.createElement('span')); var original = $(this).replaceWith(replacement); replacement .css('background-color', 'green') .text('replacement for ' + $(this).text()) .click(function() { replacement.replaceWith(original); }); 

现场演示

在演示中,当您单击一个元素时,它将使用replaceWith替换为另一个元素。 单击新元素时,使用replaceWith将其替换为原始元素。 但是,点击处理程序不再起作用(我认为它应该在哪里)。

因为当您替换原始元素时,将删除绑定到它的事件。 在调用replacement.replaceWith(original)之后,您需要在original上重新附加click事件处理程序:

 $(function() { function replace() { var replacement = $(document.createElement('span')); var original = $(this).replaceWith(replacement); replacement .css('background-color', 'green') .text('replacement for ' + $(this).text()) .click(function() { replacement.replaceWith(original); original.click(replace); }); } $('.x').click(replace); }); 

更新 :不推荐使用live()bind() ,而使用on()

你可以使用live()和bind()事件,这是你的新代码:

 $(function() { $('.x').live('click', function() { var replacement = $(document.createElement('span')); var original = $(this).replaceWith(replacement); replacement .css('background-color', 'green') .text('replacement for ' + $(this).text()) .bind('click', function() { replacement.replaceWith(original); }); }); }); 

-Live事件适用于jQuery 1.3和upper。

– 如果要停止实时传播,请使用die()函数。

现场活动正是您所寻找的