jQuery在执行之前等待replaceWith完成

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

我尝试了回调技巧( 如何扩展jQuery的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' }); } 

好的,通过这篇文章找到了解决方案: jQuery replaceWith find new element

似乎在替换后,将对象从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()的结果:

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

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

 setTimeout(function(){truncInfo(div)}, 3000); 

这将在调用truncInfo函数之前等待3秒。

对于replaceWith函数来说,3秒就足以完成其处理。 您可以根据自己的选择延长时间并检查。

这不是理想的做法,但在某些情况下可能有用。

有关setTimeout的更多详细信息,请查看http://www.w3schools.com/jsref/met_win_settimeout.asp

希望这可以帮助。