jQuery在执行之前等待replaceWith完成
我用replaceWith批量替换许多div中的html。替换后,我使用jTruncate截断文本。但是它不起作用,因为在执行时,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) {
$(".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你不必否决任何看起来不好的答案。