Проблема JQuery Selector с предыдущими - PullRequest
1 голос
/ 03 августа 2010

У меня проблемы с получением кода Jquery для работы.Я думаю, что моя проблема связана с тем, как я пишу селектор.

Вот мой оригинальный 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 позиция владельца предложения установлена ​​на абсолютное значение, top: 0px, left: 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();

Я подозреваю, что моя проблема превалирует.По сути, он скрывает каждый div перед ним (что, я полагаю, именно это я и говорю).Вместо приятного постепенного перехода от одного объявления к другому на основе значения lblSeconds, оно непрерывно мигает каждую секунду.Я не знаю правильный синтаксис, чтобы исправить путь селектора prevAll.Я пробовал несколько комбинаций, но безрезультатно.

Любая помощь приветствуется.

Спасибо.

Стивен

1 Ответ

0 голосов
/ 15 июля 2011

Хорошо, вот 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...