jQuery在执行之前等待replaceWith完成

时间:2014-06-26 11:22:44

标签: jquery replacewith

我用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'
    });
}

3 个答案:

答案 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

希望这有帮助。