J'ai du mal à faire fonctionner un code Jquery. Je pense que mon problème est lié à la façon dont j'écris le sélecteur.Problème de sélecteur JQuery avec prevAll
Voici mon HTML d'origine:
<div class="rotate">
<div class="offer-holder"><span class="lblSeconds">7</span></div>
<div class="offer-holder"><span class="lblSeconds">3</span></div></div>
... et voici mon code 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();
Cela fonctionne parfaitement (Soit dit en passant, dans le CSS, la position de l'offre porte est réglé à l'absolu, en haut: 0px, à gauche: 0px). BTW, ceci est un rotateur d'annonce. Tous les divs se chevauchent, puis apparaissent un par un, en boucle en continu.
Maintenant, je dois le modifier pour une autre page qui ressemble à ceci:
<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>
... et voici ce que j'ai essayé:
$("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();
Je soupçonne que mon problème est le prevAll. C'est en fait cacher chaque div avant (ce que, je suppose, est ce que je lui dis de faire). Au lieu d'un joli fondu d'une annonce à la suivante en fonction de la valeur de lblSeconds, il scintille continuellement chaque seconde. Je ne connais pas la syntaxe correcte pour corriger le chemin du sélecteur prevAll. J'ai essayé plusieurs combinaisons, en vain.
Toute aide est la bienvenue.
Merci.
Stephen
Veuillez inclure votre CSS. –
Le CSS n'est pas vraiment nécessaire pour la question mais je pense que les sélecteurs utilisés rendent la lecture difficile. – kasdega
Vous n'avez pas besoin d'inclure chaque couche de votre code HTML dans votre sélecteur. Vous avez seulement besoin d'en inclure suffisamment pour vous assurer qu'une collision de classes ne provoque pas d'ambiguïté dans votre sélecteur. – kasdega