2013-11-21 123 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/