2010-06-30 18 views
0

這應該很簡單。Ajax返回的jQuery slideDown,使用div延遲

我有ajax返回字符串,多個div。我需要計算字符串中的每個div(如果有必要,也許我必須創建一個數組),然後每隔x秒用一個.delay('200');滑動每個div。

請記住,每次返回時ajax返回值可能不同,因此必須爲x個div值工作。

例如

 

// For testing lets pretend ajax.return is 
ajax.return = '<div>BLEH CONTENT</div> <div>BLEH CONTENT</div>'; 

var com = $(ajax.return).hide(); 
com.prependTo('#container').slideDown('fast'); 

現在我有很明顯的代碼做了所有的div一個快了slideDown在ajax.return它把它作爲一個字符串,並預置了整個字符串。

有人可以幫助我爲字符串中的每個div創建一個循環,並在每個slideDown之間延遲1或2秒時爲每個div應用一個slideDown。

+0

您應用於'ajax.return'的'.hide()'在從ajax調用返回時不會有任何區別,因爲HTML字符串不是DOM中的元素。 – 2010-06-30 23:11:59

回答

2

Working Demo

var a = '<div>BLEH CONTENT</div><div>BLEH CONTENT</div>'; 

$(a).prependTo('#container').hide().each(function(i){ 
    var self = $(this); 
    window.setTimeout(function() { self.slideDown('fast'); },1000*i); 
}); 

取決於你有多少的div有,多setTimeout■在設置可能會成爲一個問題。我並不十分確定在任何時候可以設置多少個時間限制,而不會對時間安排造成嚴重影響。任何人都在意評論?

+0

將它們全部設置爲每個更長的延遲。 +1有趣的方法。我想到的是遞歸和.delay()。 – 2010-06-30 23:38:38

0

從我的頭頂:

$('div', ajax.return).each(function() { 
    $(this).prependTo('#container').slideDown('fast'); 
}); 
1

也許一些遞歸,像這樣的(測試):

ajaxret = $('<div>BLEH CONTENT</div><div>BLEH CONTENT</div>').hide(); 
ajaxret.prependTo('#container'); 

var toSlide = $('#container div'); // add .andSelf() to include container 
var i = 0; 
(function revealNext() { 
    toSlide.eq(i++).delay('1000').slideDown('fast', revealNext); 
//   each div  1sec  
})(); 

你或許可以是一個小更簡潔與選擇和這樣的,但你得到了一般想法。

+0

+1 - 遞歸似乎是這個明顯的選擇 – 2010-06-30 23:43:46