2010-08-02 41 views
1

我無法讓一些jquery代碼工作。我認爲我的問題在於我如何編寫選擇器。prevAll的jQuery Selector問題

這是我原來的HTML:

<div class="rotate"> 
<div class="offer-holder"><span class="lblSeconds">7</span></div> 
<div class="offer-holder"><span class="lblSeconds">3</span></div></div> 

...這是我的jQuery代碼:

$("div.rotate div.offer-holder").hide().eq(1).show(); 
function rotate() { 
    var i = $("div.rotate div.offer-holder:visible").prevAll("div").length + 1; 
    i = i % $("div.rotate div.offer-holder").length; 
    var speed = $("div.rotate div.offer-holder").fadeOut().eq(i).fadeIn().find('.lblSeconds').text(); 
    setTimeout("rotate()", (parseInt(speed) * 1000)); 
}; 
rotate(); 

這工作完全(順便說一句,在CSS,提供持有者的位置設置絕對,頂部:0px,左:0px)。順便說一句,這是一個廣告輪換。所有的div都相互重疊,然後逐一出現,不斷循環。現在

,我要修改它的另一個頁面,這看起來是這樣的:

<div class="rotate"> 
<div class="ob-offer-item rounded-corners clearfix"> 
    <div class="test"> 
    <div class="ob-offer-details"> 
    <div class="offer-holder"> XXX </div></div></div></div></div> 

...這裏是我的嘗試:

$("div.rotate div.ob-offer-item div.test div.ob-offer-details div.offer-holder").hide().eq(1).show(); 
function rotate() { 
    var i = $("div.rotate div.ob-offer-item div.test d div.ob-offer-details div.offer-holder:visible").prevAll("div").length + 1; 
    i = i % $("div.rotate div.ob-offer-item div.test d div.ob-offer-details div.offer-holder").length; 
    var speed = $("div.rotate div.ob-offer-item div.test d div.ob-offer-details div.offer-holder").fadeOut().eq(i).fadeIn().find('.lblSeconds').text(); 
setTimeout("rotate()", (parseInt(speed) * 1000)); 
}; 
rotate(); 

我懷疑我的問題是prevAll。它基本上隱藏了每一個div(我猜這就是我要說的)。基於lblSeconds值,不是從一個廣告到下一個廣告逐漸淡出,而是每秒都會持續閃爍。我不知道修正prevAll選擇器路徑的正確語法。我嘗試了幾種組合,無濟於事。

任何援助是值得歡迎的。

謝謝。

斯蒂芬

+0

請包括您的CSS。 – 2011-04-01 15:24:58

+0

這個問題並不是真的需要CSS,但我認爲使用的選擇器確實很難閱讀。 – kasdega 2011-07-15 15:53:51

+0

您不需要在選擇器中包含HTML的每一層。您只需要包含足夠的內容,以確保類的衝突不會在選擇器中造成歧義。 – kasdega 2011-07-15 15:54:01

回答

0

好這裏是一個的jsfiddle http://jsfiddle.net/pdV39/與第一種情況。您曾在setTimeout調用錯誤...它應該是:

setTimeout(rotate, (parseInt(speed) * 1000)); 

,而不是

setTimeout("rotate()", (parseInt(speed) * 1000)); 

你的選擇不完全正確或者:

$("div.rotate div.ob-offer-item div.test d div.ob-offer-details div.offer-holder:visible").prevAll("div") 

不找到什麼。除非存在類的碰撞,並且您需要更精確,否則不需要包含您試圖找到的每一層。所以這裏是對原來的jsfiddle的更新,它可以解決你的問題。 http://jsfiddle.net/pdV39/1/