2010-08-02 4 views
1

일부 Jquery 코드가 작동하는 데 문제가 있습니다. 내 문제는 제가 셀렉터를 작성하는 방법에 달려 있다고 생각합니다.JQuery Selector prevAll 문제

여기 내 원래의 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(); 

(incidently의 CSS에서 제공하는 홀더의 위치가 설정됩니다 절대, 상단 : 0 픽셀, 왼쪽 : 0 픽셀). BTW,이 광고 로테이터입니다. 모든 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(); 

내가 의심이 내 문제가있다 전. 그것은 기본적으로 모든 div 앞에 숨어 있습니다 (내 생각에, 내가 말하고있는 것입니다). lblSeconds 값을 기반으로 한 광고에서 다음 광고로 멋진 페이드 대신 매초마다 지속적으로 깜박입니다. prevAll 선택기 경로를 수정하는 올바른 구문을 모르겠습니다. 나는 여러 가지 조합을 시도했지만 아무 소용이 없었다.

어떤 도움을 환영합니다.

감사합니다.

+0

CSS를 포함하십시오. –

+0

CSS는 질문에 꼭 필요한 것은 아니지만 사용되는 셀렉터가 실제로 읽기가 어렵다고 생각합니다. – kasdega

+0

선택기에 HTML의 모든 단일 레이어를 포함 할 필요는 없습니다. 클래스의 충돌이 선택자의 모호성을 초래하지 않도록 충분히 포함시켜야합니다. – kasdega

답변

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/