在replaceWith之后没有注册的事件
当我replaceWith
一个元素replaceWith
一个DOM,然后replaceWith
它replaceWith
它时,注册到它的事件不会触发。 我需要保持完整的事件。
这是我的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()函数。
现场活动正是您所寻找的