11486 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je cherche à comprendre comment utiliser les attributs event.target et nextElementSibling.
J'ai pour cela un code contenant des boutons ayant tous la même classe et je veux savoir sur quel bouton j'ai cliqué pour afficher l'élément qui suit ce dernier. Petit problème j'ai l'impression que le code ne récupère pas l'élément bouton voici le code:

La ligne alert(...) ne sert que pour vérifier ou le code plante

(function (){
    document.addEventListener('DOMContentLoaded', function () {

        // récupération de l'objet bouton grâce à son identifiant
        let bouton = [...document.getElementsByClassName("spoiler_button")];

        // ajout d'un écouteur d'évènement dans le gestionnaire de clicks du bouton
        bouton.addEventListener('click', event=>{
            alert("OK");
            event.target.classList.add("spoiler");
            event.target.nextElementSibling.classList.replace("spoiler","spoiler-visible");
        });
    })

})()

<p>
                                    Au commencement, il y avait <button class="spoiler_button">Spoil</button><span class="spoiler"> l'Âge des Anciens</span> , où les
                                    dragons ancestraux régnaient
                                    sans conteste dans un monde noyé sous un épais brouillard.
                                    Puis vint le Feu, amenant la Disparité.
                                    Certains êtres, cachés dans les Ténèbres, y découvrent un nouveau pouvoir et
                                    s'élevèrent contre les dragons.
                                </p>


Pouvez-vous m'aider svp?
Modérateur
Bonjour,

Ta ligne
let bouton = [...document.getElementsByClassName("spoiler_button")];
est bizarre.

C'était quoi l'idée ?

Essaie plutôt :
let bouton = document.querySelector(".spoiler_button");

En faisant ainsi, bouton ne contient qu'un élément, le premier qu'il trouve avec la classe "spoiler_button".

S'il y a plusieurs boutons ayant la classe "spoiler_button", il faut faire par exemple ce qui suit :
let boutons = document.querySelectorAll(".spoiler_button");

... puis faire une boucle qui parcoure le tableau boutons.

EDIT:
Ou bien
let boutons = document.getElementsByClassName("spoiler_button");

... puis faire une boucle qui parcoure le tableau boutons.

Amicalement,
Modifié par parsimonhi (27 Nov 2020 - 23:38)
Meilleure solution