我用replaceWith批量替换许多div中的html。替换后我使用jTruncate来截断文本。但是它不起作用,因为在执行时,replaceWith没有完成。
我尝试了回调技巧(How do I extend jQuery's replaceWith function to accept a callback function?),但没有用。
有什么想法吗?
$(".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'
});
}
答案 0 :(得分:2)
好的,通过这篇文章找到了解决方案: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;
};
谢谢大家的时间!
答案 1 :(得分:1)
与.find()
之类的jQuery函数不同,.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'
});
}
答案 2 :(得分:-1)
要尝试使用异步和同步部分,您可以使用setTimeout函数。
setTimeout(function(){truncInfo(div)}, 3000);
这将在调用truncInfo函数之前等待3秒。
3秒就足以让replaceWith函数完成其处理。您可以根据自己的选择延长时间并进行检查。
这不是一种理想的做法,但在某些情况下可能有用。
有关setTimeout的更多详情,请查看http://www.w3schools.com/jsref/met_win_settimeout.asp
希望这有帮助。