在旧版本的jQuery中使用promise()

时间:2013-11-21 12:47:57

标签: jquery

我正在使用jQuery 1.4开发一个网站。我无法更新它(真的很糟糕)。

我已关注@benekastah回复from this question,以逐字逐句显示文字。它最后使用promise()方法,我无法使用,因为promise()是从1.6版开始。

这是完整的代码

var $el = $(".example:first"), text = $.trim($el.text()),
    words = text.split(" "), html = "";

for (var i = 0; i < words.length; i++) {
    html += "<span>" + words[i] + ((i+1) === words.length ? "" : " ") + "</span>";
};
$el.html(html).children().hide().each(function(i){
  $(this).delay(i*200).fadeIn(700);
});
$el.find("span").promise().done(function(){
    $el.text(function(i, text){
       return $.trim(text);
    });            
});

其余代码工作正常。

我的问题是,还有其他选择吗?我已经搜索了'promise()`之前使用的方法,但找不到它们,我发现它只是plugin但我想的更简单。

无需说我是一个JS noobie ^^。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:2)

基本上,您可以使用简单的setTimeout在vanilla JS中对此进行编码 - 即使它有点难看,您也在处理jQuery 1.4,因此您没有多少选择

setTimeout(function(){
    $el.text(function(i, text){
       return $.trim(text);
    });            
}, $el.children().length * 200 + 500);

这是一个演示:http://jsfiddle.net/jdfmS/(我在演示中添加了一个红色类,因此您可以看到它的执行位置)

另一个选项(事实证明你确实有选择!)是使用.queue() - 这是在jQuery v1.2中添加的

$el.find("span").last().queue(function(){
    $el.text(function(i, text){
       return $.trim(text);
    });
    $(this).dequeue();
});

以下是.queue()http://jsfiddle.net/jdfmS/1/

的演示