11523 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Géniaaaal, c'est tout juste merveilleux !
mais vous ne m'avez pas laissé le temps de réfléchir Smiley langue

Je vous remercie, je vais essayer de tout comprendre maintenant !
Pourriez-vous m'aider une dernière fois ?
En fait, le code que vous m'avez fournit en premier temps (afin de changer l'état de la div .marqueur) fonctionne très bien avec la structure html que j'avais fournie (les div.marqueur se suivent)

En réalité, la vraie structure est :

<div id="marqueurs">
    <div class="marqueur"><div class="HE_Marker">...</div></div>
    <div class="marqueur"><div class="HE_Marker">...</div></div>
    <div class="HE_Marker">...</div>
    <div class="marqueur"><div class="HE_Marker">...</div></div>
    <div class="marqueur"><div class="HE_Marker">...</div></div>
    <div class="marqueur"><div class="HE_Marker">...</div></div>
    <div class="HE_Marker">...</div>
    <div class="HE_Marker">...</div>
    <div class="marqueur"><div class="HE_Marker">...</div></div>
  ...
</div>

Les HE_Marker qui n'ont pas de parent "marqueur" sont des emplacements invisibles. Il peut y en avoir 1 comme 10 entre deux div.marqueur

Du coup, j'ai fait une sorte de chose pas très jolie qui fonctionne :

$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.marqueur').show(500)
})
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
	$(this).parents('.marqueur').next('.HE_Marker').next('.marqueur').show(500)
})				
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
	$(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
})				
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
})				
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
})	
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
})											


J'ai essayé de modifier votre script de cette manière :


$(document).ready(function () {
	$('#marqueurs .marqueur').eq(0).show(0)
        $('#marqueurs').on('click', '.marqueur .debloquer', function() {
	        if($(this).parents('.marqueur').next('.HE_Marker')) {
		       $(this).parents('.HE_Marker').next('.marqueur').show(500)
	        }
	        else {$(this).parents('.marqueur').next('.marqueur').show(500)
               }     
         })
 }


mais bien évidement, ça ne fonctionne pas Smiley ohwell
Bonjour.

Je ne suis pas sûr d'avoir tout compris.

Tes divs.HE_Marker, elles sont censées toujours être cachées ? Ou elles ont aussi un bouton à l'intérieur pour faire apparaître la div suivante ?

Si c'est le premier cas, tu peux essayer ceci :
$('#marqueurs').on('click', '.marqueur button', function() {
  
  var $next = $(this).parents('.marqueur').next();
  while( !$next.hasClass('marqueur') ) {
    $next = $next.next();
  }
  $next.fadeIn(400)
})

Quand je te donne des bouts de code comme ça tout fait (et qui fonctionnent), essaie de toujours comprendre comment ça fonctionne, pourquoi ça fonctionne (avec la doc jQuery, ce ne devrait pas être compliqué)... et s'il y a une ligne que tu ne comprends pas, tu peux me demander une explication ?

Je vois que dans tes tentatives, tu as essayé de mettre plusieurs fois l'écouteur 'click' sur les mêmes divs :
// Par exemple ça...
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.marqueur').show(500)
})
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
	$(this).parents('.marqueur').next('.HE_Marker').next('.marqueur').show(500)
})				
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
	$(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
})
...

// Tu devrais plutôt le transformer en ça...
$('#marqueurs').on('click', '.marqueur .debloquer', function() {
    $(this).parents('.marqueur').next('.marqueur').show(500)
    $(this).parents('.marqueur').next('.HE_Marker').next('.marqueur').show(500)
    $(this).parents('.marqueur').next('.HE_Marker').next('.HE_Marker').next('.marqueur').show(500)
    ...
})
Bonjour,
j'espère que vous avez passé un bon réveillon Smiley cligne

Effectivement, il s'agissait bien du premier cas,
votre code :

$('#marqueurs').on('click', '.marqueur button', function() {
  
  var $next = $(this).parents('.marqueur').next();
  while( !$next.hasClass('marqueur') ) {
    $next = $next.next();
  }
  $next.fadeIn(400)
})

correspond exactement à ce dont j'ai besoin.
Je comprends votre code, et je me rends compte que je n'aurais pas pensé à
  while( !$next.hasClass('marqueur') ) {

Maintenant, ça me parait si logique...
je me suis mis sur un tuto d'openclassrooms, en fait le jquery est bien plus simple que je ne le pensais

Je vous remercie pour votre aide,
bon réveillon !
Pages :