【问题标题】:Alternative to jQuery replaceAll()?替代 jQuery replaceAll()?
【发布时间】:2012-05-19 14:17:33
【问题描述】:

我有一些代码可以从动态构建的表中删除一个 tr 作为 jQuery 对象(每个 tr 都有一个唯一的 id:trid):

tri = $("#"+trid+"");
var newrow = '<tr id="newr"><td colspan="4" align="center"><div id="nrow"> </div></td></tr>';
tri.after(newrow);
tri.detach();

然后我使用 innerHTML 在 div 'nrow' 中放置一个表单...表单中有一个 jQuery ui datepicker,这是第一次工作。

当表单被取消时,我将列表恢复到原来的状态:

setTimeout("tri.replaceAll( $('#newr') )", 400);

这一切都很好,除了如果我尝试在此之后编辑该(或任何)行,它会杀死表单中的 jquery ui datepicker。我很难将其归结为 replaceAll 线。如果我把它拿出来并通过重新构建来替换列表,它就可以正常工作(也不是超时)。

那么是否有另一种方法可以在不使用 replaceAll 的情况下将 tr 'newr' 替换为 jquery 对象 'tri'(replaceWith 也不起作用)?

编辑:

好的,这就是我将表单从 div 移到页面其他位置的方式:

eP = $('#eP');
eP.replaceAll( $('#nrow') );
$("#editPast").show('blind','',500,'');

eP 包含隐藏的 div editPast...

然后在取消函数中我把 eP 放回去:

setTimeout(function() {eP.appendTo($('#ePreplace')); }, 500);  (thanks adeneo!)

在我 tri.replaceAll 之前,尽管使用 setTimeout 它发生在...之后...

所以我想我的问题是 eP 在 #nrow 中使用后不携带 datepicker 状态,只是 html。


已修复!

将 eP.appendTo 更改为 $('#eP').appendTo 以便它从 dom 而不是原始变量中获取它。哎呀!感谢您的just detach() 评论让我重新思考这个问题!

【问题讨论】:

  • 不要将字符串传递给setTimeout
  • 什么 SLaks 说的,只是 detach() 第二次的表格,你已经在别处使用它了。如果你只是在元素之间切换,你可能只是隐藏/显示它们,而不是从 DOM 中删除它们。
  • Slaks,这不是我第一次听说,但如果不加引号,我不知道该怎么做。如果我把引号拿走,它不会等待 400 毫秒,它会立即执行。
  • setTimeout(function() {tri.replaceAll( $('#newr') ) }, 400);
  • @K'shin,看@adeneo的评论,是setTimeout的正确用法。你在 w3schools.com 上学过报价吗?

标签: javascript jquery jquery-ui html-table


【解决方案1】:

已修复!

将 eP.appendTo 更改为 $('#eP').appendTo 以便它从 dom 而不是原始变量中获取它。哎呀!感谢 adeneo 让我用你的“just detach()”评论重新思考这个问题!

感谢 NiftyDude 建议我也这样做...

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多