当我replaceWith
一个要从DOM中带出一个元素的元素,然后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
将其替换为原始元素。但是,点击处理程序不再起作用(我认为它应该在那里)。
答案 0 :(得分:11)
因为当您替换原始元素时,会删除绑定到它的事件。调用click
后,您需要在original
上重新附加replacement.replaceWith(original)
事件处理程序:
$(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);
});
答案 1 :(得分:4)
更新: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及更高版本。
- 如果您想停止使用die()功能进行实时传播。
答案 2 :(得分:3)