在replaceWith之后没有注册的事件

str*_*ger 19 jquery events dom

当我将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);
    });
Run Code Online (Sandbox Code Playgroud)

现场演示

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

Sho*_*og9 11

因为当您替换原始元素时,将删除绑定到它的事件.在调用之后,您需要重新附加click事件处理程序:originalreplacement.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);
});
Run Code Online (Sandbox Code Playgroud)

  • 我希望有一种自动/优雅的方式来做到这一点.我想这个解决方案必须要做. (2认同)