IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Cacher/supprimer une DIV


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administratif (webmaster n'est pas mon métier)
    Inscrit en
    Août 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administratif (webmaster n'est pas mon métier)
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2023
    Messages : 3
    Par défaut Cacher/supprimer une DIV
    Bonjour,

    Je suis nouvelle sur developpez.net, c'est donc ma première demande. J'espère que je suis au bon endroit, c'est un peu difficile de s'y retrouver.
    Depuis pas mal de temps je tâtonne avec mon script javascript. J'ai des résumés de livres (issus d'une BDD) et chaque résumé doit s'afficher ou disparaître au clic sur son lien Voir le résumé/Cacher le résumé.
    Je souhaite :

    - Voir/Cacher une div en cliquant sur son lien
    - Voir/Cacher une autre div en cliquant sur son lien et la div précédemment ouverte se ferme.
    Ces deux points fonctionnent.

    - Pouvoir aussi refermer la div qui est ouverte en recliquant sur son lien.
    C'est ce dernier point qui pose problème. Quand je clique sur "Cacher le résumé", rien ne se passe.
    Et pour cause, je ne sais pas ce qui manque à mon script.

    J'ai mis mes codes dans jsfiddle : https://jsfiddle.net/Valerie6377/pLzyahn7/5/
    J'espère que quelqu'un pourra m'aider et trouver ce qui ne va pas. :-)

    Valérie

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    Supprimes le code jQuery en bas de page, et modifies l'attribut onclick comme ça onclick="ouvrirFermerSpoiler.call(this);" afin de profiter de l'usage du mot clé this (qui pointe sur le <div class="spoilerDiv">....</div> cliqué) à l'intérieur de la fonction.

    Après la fonction pourrait se résumer à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function ouvrirFermerSpoiler() {
      let spoilers = document.getElementsByClassName('contenuSpoiler');
     
      for (let i = 0; i < spoilers.length; i++) {
        if (this.contains(spoilers[i])) {
          if (spoilers[i].classList.contains('afficher')) {
            spoilers[i].classList.remove("afficher");
            spoilers[i].classList.add("cacher");
            this.querySelector('.lienAfficher').textContent = "Voir le résumé";
          } else {
            spoilers[i].classList.remove("cacher");
            spoilers[i].classList.add("afficher");
            this.querySelector('.lienAfficher').textContent = "Cacher le résumé";
          }
        } else {
          spoilers[i].classList.remove('afficher');
          spoilers[i].classList.add('cacher');
          spoilers[i].closest('.spoilerDiv')
          .querySelector('.lienAfficher').textContent = "Voir le résumé";
        }
      }
    }

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Administratif (webmaster n'est pas mon métier)
    Inscrit en
    Août 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administratif (webmaster n'est pas mon métier)
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2023
    Messages : 3
    Par défaut Cacher/supprimer une DIV
    Bonjour Toufik83

    Merci beaucoup - C'est formidable, ça fonctionne :-) Franchement je ne pensais à tout ça.
    Je ne manipule pas Javascript depuis longtemps, et je tournais en rond sans jamais trouver.
    J'ai retiré la classe "ouvrir" dans mon html puisqu'elle servait à jongler entre les mots "cacher le résumé" et "voir le résumé" dans mon jquery qui disparaît aussi.

    Par contre je me demandais à quoi fait référence if (this.contains(spoilers[i])) {....
    À la div où se trouve la fonction dans le html ? Je suis étonnée de commencer de cette façon sans préciser.
    Mais du moment que ça fonctionne et que la console ne trouve pas d'erreur... :-)

    Je n'ai plus qu'à mettre à jour mes 7 pages php.
    Je suis super contente.

    Valérie

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Citation Envoyé par Valerie6377 Voir le message
    Par contre je me demandais à quoi fait référence "if (this.contains(spoilers[i])) {...".
    C'est une instruction qui vérifie si le spoilers[i] est un enfant du div cliqué ou pas, si oui il doit donc être traité séparément que les autres spoilers, sinon on le cache en lui rajoutant la classe cacher et supprimer la classe afficher.

    Citation Envoyé par Valerie6377 Voir le message
    À la div où se trouve la fonction dans le html ? Je suis étonnée de commencer de cette façon sans préciser.
    Le mot clé this fait référence à <div class="spoilerDiv">....</div> que l'on a cliqué dessus, c'est comme si on dit à JS d'appeler la fonction ouvrirFermerSpoiler depuis le contexte du <div class="spoilerDiv">....</div>, ceci est possible avec Function.prototype.call(), et donc on peut passer la référence en tant que paramètre grâce à ouvrirFermerSpoiler.call(this).

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Administratif (webmaster n'est pas mon métier)
    Inscrit en
    Août 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administratif (webmaster n'est pas mon métier)
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2023
    Messages : 3
    Par défaut Cacher/supprimer une DIV
    Merci pour ces explications.
    J'ai encore appris beaucoup de choses aujourd'hui. :-)

    Bon dimanche !

    Valérie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/01/2022, 16h26
  2. [Dojo] Supprimer une Div et les wigets qu'elle contient
    Par okilele dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 18/12/2009, 20h18
  3. Cacher une div position:fixed
    Par LogistiX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2009, 14h25
  4. supprimer une div dans une autre page html
    Par root76 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/02/2008, 10h26
  5. Afficher / Cacher une Div contenant un slider
    Par KrusK dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/07/2007, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo