jQuery在执行之前等待replaceWith完成

jQuery在执行之前等待replaceWith完成,jquery,replacewith,Jquery,Replacewith,我用replaceWith批量替换许多div中的html。替换后,我使用jTruncate截断文本。但是它不起作用,因为在执行时,replaceWith没有完成 我尝试了回调技巧()但没有成功 有什么想法吗 $(".hotel_info").each(function () { var div; div = $(this); div.replaceWith(data); truncInfo(div); }); function truncInfo(div) {

我用replaceWith批量替换许多div中的html。替换后,我使用jTruncate截断文本。但是它不起作用,因为在执行时,replaceWith没有完成

我尝试了回调技巧()但没有成功

有什么想法吗

$(".hotel_info").each(function () {
    var div;
    div = $(this);
    div.replaceWith(data);
    truncInfo(div);
});

function truncInfo(div) {
    div.jTruncate({
        length: 100,
        minTrail: 100,
        moreText: '[more...]',
        lessText: '[less...]',
        ellipsisText: '...',
        moreAni: 'fast',
        lessAni: 'fast'
    });
}

要尝试使用异步和同步部分,可以使用setTimeout函数

setTimeout(function(){truncInfo(div)}, 3000);
这将在调用truncInfo函数之前等待3秒钟

setTimeout(function(){truncInfo(div)}, 3000);
3秒钟足以让replaceWith函数完成其处理。您可以根据自己的选择和检查来延长时间

这不是一种理想的做法,但在某些情况下可能有效

有关设置超时的更多详细信息,请查看


希望这有帮助。

好的,多亏了这篇文章,我们找到了解决方案:

似乎在替换为之后,对象将从DOM中删除,因此将创建一个新的对象。所以,我不得不这样修改代码:

$(".hotel_info").each(function () {
  var div;
  var div2;
  div = $(this);
  div2 = div.replaceWithPush(data);
  truncInfo(div2);
});

$.fn.replaceWithPush = function (a) {
  var $a = $(a);
  this.replaceWith($a);
  return $a;
};

谢谢大家抽出时间

与jQuery函数(如
.find()
)不同,
.replaceWith()
不更新元素集(构成jQuery对象本身)

这意味着删除后,您将保留旧的引用;这里的技巧是保留替换元素的引用

在您的情况下,您可以采取不同的做法,但:

$(".hotel_info").replaceWith(function () {
    return truncInfo(this);
});
确保
truncInfo
返回调用
jTruncate()
的结果:


.replaceWith()
是一个“同步”函数,因此在尚未完成的情况下,似乎不太可能运行其他代码;
数据从哪里来?它是一个在内部执行AJAX调用的函数吗?也许可以帮助您同步多个异步任务。我相信“数据”来自哪里并不重要。即使是AJAX调用,因为replaceWith是同步的,所以在完成之前不应该执行truncInfo;也就是说,
数据从哪里来,你没有回答这个问题。原来的问题是replaceWith没有完成。我的回答正好说明了如何让进度等待特定的时间。我在回答中也提到了检查它是否符合问题的需要@Alexander Kludt你不必否决任何看起来不好的答案。