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 :

Fermer toutes les div sauf celles indiquées.


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut Fermer toutes les div sauf celles indiquées.
    Bonjour,

    Je chercher sans doute l'impossible.
    J'ai un grand nombre de div.

    J'aimerai une function qui me permettent de toutes les mettre en display:none , sauf celle indiquées dans la liste des valeurs.

    Le seul moyen que j'ai trouver c'est faire la liste de toutes les divs. Sachant que leur id est crée en function de la bdd, c'est super lourd à faire.

    N'y aurait pas un moyen simple de fermer toutes les div d'un coup ?
    Après quoi je pourrai mettre inline celles que je souhaite laisser ouvertes.

    Bonne journée

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Je trouve que c'est un peu moche si ce sont tous les div que tu veux fermer, je te conseille de ne fermer que ceux qui sont dans un conteneur spécifique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function hideAllDivInContainer(idDivExcept, idConteneur){
    var divs = document.geElementById(idConteneur).getElementsByTagName("div");
    for (i = 0; i< divs.length; i++){
        if (divs[i].id != idDivExcept) divs[i].style.display="none";
    }
    }
    C'est plus souple comme ça. Si tu veux que ce soit tous les div , tu donnes un id à la balise body et tu le passes en paramètre.

    A+.

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Avec une fonction qui fermerait tout les id si l'id ne correspond pas celle que tu veux conserver?
    Sa devrait marcher théoriquement

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par EIN-LESER Voir le message
    Avec une fonction qui fermerait tout les id si l'id ne correspond pas celle que tu veux conserver?
    Sa devrait marcher théoriquement
    Et pratiquement avec le code que j'ai fourni avec une petite correction :
    var divs = document.geElementById(idConteneur).getElementsByTagName("div");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var divs = document.getElementById(idConteneur).getElementsByTagName("div");

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut
    Si je comprend bien, si la div n'a pas d'id elle restera ouverte ?
    Si c'est bien ca, c'est encore mieux que ce que j'imaginais !

    Je test ça dans la journée. (j'me réveille juste)
    Merci

  6. #6
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    pourquoi ne mettre leurs mettre un style CSS par défaut au chargement de la page (sans javascript donc) en display:none;

    et s'il y a des changement, de ne cacher que celles que tu auras affiché via javascript et afficher les nouvelles.

    sinon tu peux pousser l'idée d'andry.aime plus loin et masquer simplement le container (et sortir les DIV a afficher).

    dernière solution, je te conseille jQuery, c'est tellement plus simple, en général j'ajoute une classe commune à toutes les div du même type et je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.classACacher').hide().filter('#idDeLaDivAAfficher').show();

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut
    Jquery c'est simple quand on maitrise. Sinon c'est encore des centaines d'heures à apprendre.

    Je ne vais pas mettre de none par defaut car certaine doivent être inline.
    Mais je vais y arrivé, et c'est même plus compliqué car certain div doivent reste ouverte ou se réouvrir peu importe et changer leur contenu pour reprendre celui de départ. J'ai commencé, mais j'ai encore du taff.

    Je tenterai du JQuery quand j'aurai réussit a faire proprement mes pages.
    Si je suis bordélique et que je tente un nouveau langage ...

    Merci, bonne journée

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par westernz Voir le message
    Si je comprend bien, si la div n'a pas d'id elle restera ouverte ?
    Si c'est bien ca, c'est encore mieux que ce que j'imaginais !
    Citation Envoyé par andry.aime Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function hideAllDivInContainer(idDivExcept, idConteneur){
    var divs = document.getElementById(idConteneur).getElementsByTagName("div"); // recupération des div dans l'éléments ayant l'id idConteneur;
    for (i = 0; i< divs.length; i++){ // parcourir les div de l'élement
        if (divs[i].id != idDivExcept) // tester si ce n'est le div à laisser visible
                        divs[i].style.display="none"; //cacher si c'est le cas
    }
    }

  9. #9
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par westernz Voir le message
    Jquery c'est simple quand on maitrise. Sinon c'est encore des centaines d'heures à apprendre.
    jQuery c'est extrèmement simple tout ton problème se résoud en la ligne que je t'ai donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.classACacher').hide().filter('#idDeLaDivAAfficher').show();
    $() => jquery
    si tu tape une chaine précédée d'un "point" (.) ça précise tous les éléments d'une "class" (attribut html)
    .hide() => cacher (implicitement display:none; )
    .filter() => rechercher dans l'ensemble en cours
    si tu tapes une chaine précédée d'un "dièse" (#) ça signifie que tu précise le nom d'un id (attribut html).
    .show() => afficher (rétablissement du dernier display)

    Citation Envoyé par westernz Voir le message
    Je ne vais pas mettre de none par defaut car certaine doivent être inline.
    Mais je vais y arrivé, et c'est même plus compliqué car certain div doivent reste ouverte ou se réouvrir peu importe et changer leur contenu pour reprendre celui de départ. J'ai commencé, mais j'ai encore du taff.
    Si la majorité de tes éléments doivent être cachés, c'est pourtant la meilleure solution, autant du point de vue des performance que de l'esthétique, voir un site se charger et puis voir plein d'élément disparaître, ça fait très sale, je préfère voir l'inverse, un site qui fait apparaître des éléments.

    niveau pratique, tu initialise tout à diplay inline et tu remplaces la majorité par des display none, tu te rend bien compte que l'inverse est bien meilleur, initialiser tout à display none et n'en modifier que qqs-uns en inline.


    Citation Envoyé par westernz Voir le message
    Je tenterai du JQuery quand j'aurai réussit a faire proprement mes pages.
    Si je suis bordélique et que je tente un nouveau langage ...
    Là je ne peux que te donner raison et t'encourager de continuer dans cette voie, il est important de bien maîtriser un langage "pur" avant de vouloir utiliser des librairies.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut
    Avec une bonne explication c'est de suit de plus simple.
    Mais je tente d'abord de finir au propre ma version actuelle.

    Merci à tous. Ca marche un peu même si je sature vite. Et c'était plus complexe que prévu. Mais je devrais finir par y arrivé.

    Bonne journée

Discussions similaires

  1. [Débutant] Fermer toutes les fenêtres sauf la principale
    Par Taiby dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 19/07/2013, 17h08
  2. Masquer toutes les feuilles sauf celle du mois en cours
    Par progheure dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/05/2013, 14h10
  3. Réponses: 3
    Dernier message: 17/08/2012, 11h03
  4. Grant all sur toutes les bases sauf la base mysql
    Par titoff002 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/09/2005, 22h18
  5. [VB6] Quitter l'appli et fermer toutes les feuilles...
    Par The Bob dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 21h06

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