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

jQuery Discussion :

Ré-ordonner un tableau HTML


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut Ré-ordonner un tableau HTML
    Bonjour,

    J'ai un petit soucis pour ré-ordonner un tableau HTML avec l'utilisation de la fonction jquery .clone(true,true). (peut-être pas la meilleur solution...)
    J'ai un tableau assez compliqué, généré par un outil tiers (SharePoint) qu'il faut que je réordonne. En effet ce dernier à un certain nombre de trous, "td" vides, et il faut que je lui redonne un aspect plus propre !

    Voici un exemple :
    - Etat actuel
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table unselectable="on" class="ms-cui-gallery" id="Ribbon.EditingTools.CPEditTab.Paragraph.ElementWithStyle.Menu.Styles.Gallery">
        <tbody unselectable="on">
            <tr unselectable="on">
                <td unselectable="on" class="ms-cui-gallery-td ms-cui-gallery-element-sizeCustom">[...]value1[/...]</td>
                <td unselectable="on" class="ms-cui-gallery-td ms-cui-gallery-element-sizeCustom">[...]empty[/...]</td> =>Hidden
                <td unselectable="on" class="ms-cui-gallery-td ms-cui-gallery-element-sizeCustom">[...]value1[/...]</td>
                <td unselectable="on" class="ms-cui-gallery-td ms-cui-gallery-element-sizeCustom">[...]empty[/...]</td> =>Hidden
    [/...]
    Le tout sur sur plusieurs lignes, plusieurs colonnes...
    Ca donne un aspect visuel sous la forme :
    valeur 1 valeur 2
    valeur 3 valeur 4 valeur 5 valeur 6 valeur 7
    valeur 8 valeur 9 valeur 10
    Le rendu que je souhaite est le suivant :
    valeur 1 valeur 2 valeur 3 valeur 4
    valeur 5 valeur 6 valeur 7 valeur 8
    valeur 9 valeur 10
    Pour cela, j'utilise la fonction clone, et recréé mon tbody pour afficher ce que je veux :
    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
    function OrderTableElement(SubMenuElement){    
        var subMenuTables = ["Paragraph.ElementWithStyle","Styles.Styles"];
        for(subMenuTable in subMenuTables){
            var currentTable = SubMenuElement.find("table[id*='"+ subMenuTables[subMenuTable] +"']");
            var tds = currentTable.find("td").clone(true, true);
     
            var tbdy=document.createElement('tbody');
            tbdy.setAttribute("unselectable", "on", 0);
     
            var currentColumn = 0;
            var currentRow = 0;
            for (var i = 0; i < tds.length; i++,currentColumn++) {
                if(i == 0 || i%4 == 0){
                    row = tbdy.insertRow(currentRow);
                    row.setAttribute("unselectable", "on", 0);
                    currentColumn = 0;
                    currentRow++;
                }
                column = row.insertCell(currentColumn);
                column.setAttribute("unselectable", "on", 0);
                column.className = "ms-cui-gallery-td ms-cui-gallery-element-sizeCustom";
                column.innerHTML = tds[i].innerHTML;
            } 
     
            currentTable.append(tbdy);
        }
    }
    Mon problème, c'est que quelque part bien en dessous de chaque td, j'ai une div avec des handlers (que je ne maîtrise pas du tout et ne peux réappliquer moi même ).
    Et c'est là que je pensais arriver à mes fins avec la fonction .clone(true,true).
    Est-ce que je l'utilise mal ?
    Est-ce que vous pensez qu'il y a une meilleur solution pour effectuer le tri de mon tableau sans le vider ?

    J'avoue avoir besoin de vos lumières, par ce que je tourne un peu en rond là...

    PS : le code var subMenuTables = ["Paragraph.ElementWithStyle","Styles.Styles"]; est par ce qu'en réalité j'ai deux tableaux à ré-ordonner...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Je n'ai pas le temps de regarder votre code dans le détail, mais je vous suggère deux pistes :

    1. Plugin dvjhClone
    2. Comment puis-je filtrer dynamiquement une table ?

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message

    Testé mais même problème... en regardant le code, il semble qu'il utilise également la fonction .clone(true,true).
    En effet je l'avais vu, mais cette fonction permet de filtrer les lignes/colonnes à afficher dans un tableau qui est complet... Moi je voudrais juste organiser tous mes TD de façon à n'afficher que des lignes complètes, donc qu'elles aient le même nombre de colonnes, et aucune de vide...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    filtrer ...
    http://www.developpez.net/forums/d10...eurs-colonnes/

    ... en relisant j'ai compris ta demande

    http://jsfiddle.net/n33Sc/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ... en relisant j'ai compris ta demande
    http://jsfiddle.net/n33Sc/
    Merci c'est exactement l'idée, mais est ce qu'il est possible de copier les évènement liés aux différents éléments (sous chaque td) ?
    Dans l'exemple que tu fournis, qui m'énerve vu comme cela semble simple , tu manipules le texte contenu dans les différentes colonnes, est ce qu'il est possible de faire de même avec le DOM complet d'un TD et tous les handlers associés ? La fonction .clone(true,true) est-elle la seule solution ? Par ce qu'elle ne semble pas fonctionnée dans mon cas...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Je te propose alors de juste déplacer les cellules (balises td) au lieu de modifier leur contenu
    elle conserveront ainsi leurs propriétés et méthodes liées.

    Le principe
    on parse le table pour constituer deux array collections l'un contenant les td non vides, l'autre contenant les td vides
    il suffit de boucler d'abord sur l'array des td non vides pour les appender dans les lignes tr en incrementant le nr de ligne tr:eq(?) selon le nombre de cellules par lignes (cpl)
    on fait ensuite la même chose avec l'array des cellules vides à la suite ...

    http://jsfiddle.net/n33Sc/2/

    dans cet exemple les td affichent leur id sur le click, on constate que les cellules n'ont pas perdu leurs evenements ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Inverser abscisses et ordonnées d'un tableau HTML
    Par zzzer dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/11/2012, 12h04
  2. [HTML et CSS] Prolème impression tableau html
    Par ofo_tn dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/08/2005, 17h27
  3. Insertion javascript dans tableau HTML
    Par Rocca dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2005, 12h28
  4. Tableau html décalage
    Par verticka dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/02/2005, 15h01
  5. [VB6] recuperer des valeurs ds un tableau html avec vb!!
    Par leo13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2004, 13h02

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