2010-08-02 42 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/