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 :

Collapse de lignes de tables


Sujet :

JavaScript

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut Collapse de lignes de tables
    Bonjour

    J'ai implémenté une fonction me permettant de masquer des lignes de tableaux sauf la première pour une catégorie donnée.
    L'implémentation fonctionne très bien sous IE, Firefox et Chrome:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function collapseLines(table_id, collapse_button_id, req_id, rowspan_value){
        var button = document.getElementById(collapse_button_id);
        var rows = document.getElementById(table_id).rows;
        var action = false;
        var count = 0;
        if(button.value=='-'){
            button.value='+';
            var collapse = true;
        }
        else{
            button.value='-';
            collapse = false;
        }
        for(var i=0; i<rows.length; i++){
            if(rows[i].id == "first_"+req_id){
                action = true;
            }
            else{
                if(action){
                    if(count<rowspan_value-1){
                        collapse?rows[i].style.display = 'none' : rows[i].style.display = 'table-row';
                        count++;
                    }
                    else{
                        action = false;
                    }
                }
            }
        }
        var first_line_tds = document.getElementsByName(req_id);
        for(i=0; i<first_line_tds.length; i++){
            collapse? first_line_tds[i].rowSpan = null : first_line_tds[i].rowSpan = rowspan_value;
        }
    }
    Seulement, et seulement sous IE (v8), lorsque je collapse, je remarque le "paté" suivant (cf image jointe).
    Y aurait-il un problème de style ?
    Comment contourner ce problème apapremment existant seulement pour IE ?

    Merci d'avance de vos solutions.

    @++
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    essaye de rajouter un line-height et un font-size à 0

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Salut SpaceFrog

    J'ai appliqué ce que tu indiquais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(collapse){
        rows[i].style.display = 'none';
        rows[i].style.lineHeight = 0;
        rows[i].style.fontSize = 0;
    }
    else{
        rows[i].style.display = 'table-row';
    }
    Malheureusement, le problème reste le même sous IE.
    Merci en tout cas de ta réponse.

    @++

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    heu a vrai dire .. il est ou le paté ...
    quel est le bug d'affichage ? on pourrait voir le rendu sous ffx ?

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Hello SapceFrog

    Je te prépare ça dès que possible. Je ferais une image dans mon prochain post du rendu "collapsé" avec FF.
    Le rendu IE est dans mon premier post.

    @++

  6. #6
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Hello SpaceFrog

    Voici comme demandé le rendu "collapsé" sous Firefox.
    Si tu compares avec l'image de mon premier post sous IE, tu verras que sous IE, j'ai une sorte de bloc coloré uniformément apparaissant lors du collapse, chose que je n'ai pas avec Firefox.
    Merci encore de ton aide.

    @++
    Images attachées Images attachées  

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    les display sont ils initialisés dans le code au départ ?

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Hello

    Non, les displays ne sont pas initialisés.

    @++

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    initialise les pour voir ?

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    J'ai essayé, ben, c'est pareil
    Je me demande si la feuille de style ne viendrait pas jouer les troubles-fêtes.

    @++

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je pense que tu devrais regrouper tes différents blocs dans des tbody différents et faire varier le display des tbody.

    Pour info, IE est un très mauvais élève pour ce qui est des modifications de rendu des tables.

  12. #12
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Je pense qu’IE ne connaît pas les valeurs table-* et se sent tout con quand il doit les traiter. Essaye avec juste block. Ça va rendre le script un peu plus complexe car il faudra détecter le type de navigateur…

    Moi je vois ça comme ça :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // au début du script
    var ROW_DISPLAY = document.all
    	? 'block'
    	: 'table-row';
     
    // et ensuite
    rows[i].style.display = collapse
    	? 'none'
    	: ROW_DISPLAY;


  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Watilin tu as raison, IE ne connait pas table-* en revanche, pour rétablir un display de ce type (pour autant qu'il n'ait pas été définit en none dans le code CSS), le meilleur moyen est de réinitialiser le display :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rows[i].style.display = collapse ? 'none' : '';

  14. #14
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Bonjour à tous

    Avant tout, merci à tous pour vos contributions. Ca fait plaisir.
    J'ai essayé de mixer vos diverses propositions. Malheureusement, l'effet demeure le même (cf l'image de mon premier post).
    J'ai remanié le code Javascript afin de faire plus propre:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    function collapse(rows, req_id, action, count, rowspan_value, collapse){
        for(var i=0; i<rows.length; i++){
            if(rows[i].id == "first_"+req_id){
                action = true;
            }
            else{
                if(action){
                    if(count<rowspan_value-1){
                        rows[i].style.display = collapse ? 'none' : '';
                        count++;
                    }
                    else{
                        action = false;
                    }
                }
            }
        }
    }
     
    function changeRowspan(req_id, collapse, rowspan_value){
        var first_line_tds = document.getElementsByName(req_id);
        for(var i=0; i<first_line_tds.length; i++){
            collapse? first_line_tds[i].rowSpan = null : first_line_tds[i].rowSpan = rowspan_value;
        }
    }
     
    function collapseLines(table_id, collapse_button_id, req_id, rowspan_value){
        var button = document.getElementById(collapse_button_id);
        var rows = document.getElementById(table_id).rows;
        var action = false;
        if(button.value=='-'){
            button.value='+';
            var collapse = true;
        }
        else{
            button.value='-';
            collapse = false;
        }
        collapse(rows, req_id, action, 0, rowspan_value, collapse);
        changeRowspan(req_id, collapse, rowspan_value);
    }
    Mais le problème reste entier. Je ne comprend pas comment ça se fait.
    Toute proposition est la bienvenue et merci encore de votre aide.

    @++

Discussions similaires

  1. Imposer a Access l'écrasement d'une ligne de table
    Par 3lyxir dans le forum Access
    Réponses: 7
    Dernier message: 18/05/2006, 14h39
  2. [9i, 8i] Nombre de lignes dans tables
    Par Débéa dans le forum Oracle
    Réponses: 1
    Dernier message: 23/03/2006, 10h19
  3. update simultané de plusieur lignes dans table
    Par jarod_bx dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2005, 22h13
  4. Modification de ligne de table
    Par 10-nice dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/10/2004, 15h30
  5. Fusion de lignes de tables en éliminant les redondances
    Par MinsK dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 22/04/2004, 09h21

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