2013-11-21 51 views
0

我正在使用jQuery 1.4在网站上工作。我无法更新它(真的很糟糕)。在旧版本的jQuery中使用promise()

我跟着@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 ^^。任何帮助非常感谢。

回答

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的1.2

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

这里加入是为.queue()演示:http://jsfiddle.net/jdfmS/1/