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 :

Parcours de tableau et optimisation


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Parcours de tableau et optimisation
    Bonjour,

    je débute en javascript et je souhaiterai avoir votre avis sur le probleme suivant :

    j'ai une HTML Table (un datagrid généré dynamiquement en ASP.NET) permettant de saisir des valeurs sur plusieurs lignes pour tous les jours d'un mois.
    J'ai donc autant de colonnes que de jours dans le mois (plus quelques entetes de ligne). Le nombre de ligne est variable. Dans chaque "case" du tableau, j'ai un input (textBox) dans lequel on saisie une valeur numérique.

    La derniere ligne de mon tableau contient la somme des valeurs sur chaque colonne. Cette somme est calculé en javascript et est mise à jour à chaque fois qu'on modifie une textbox du tableau.

    Ma question est la suivante : je trouve que le temps nécessaire pour faire la somme de chaque colonne lors du premier affichage est trop long (apres çà va car je ne recalcule que la colonne modifiée). J'utilise un getElementById sur chaque textbox pour récupérer la valeur.

    Comment puis-je optimiser le parcours (par ligne et par colonne) ?
    Est-ce qu'il vaut mieux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var val = document.getElementById('monDatagrid' +'__ctl' + numLigne + '_txtNb' + numColonne).firstChild.nodeValue;
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var val = maTable.rows[numLigne].cells[numColonne].firstChild.firstChild.nodeValue  ;
    D'avance merci

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    pourquoi pas un getElementsByTagName("input")

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Les inputs générés automatiquement par asp.net n'ont pas d'attributs "name" fixe, ils sont du style :
    nomduDatagrid:_ctlx:idDuControle
    ce qui donne pour ma premiere ligne / premiere colonne :
    monDatagrid:_ctl2:txtNb0
    et pour ma deuxieme ligne / deuxieme colonne :
    monDatagrid:_ctl3:txtNb1
    etc...

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par mik007
    Les inputs générés automatiquement par asp.net n'ont pas d'attributs "name" fixe
    Et leurs ids?

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var somme=0;
    var matable=document.getElementById(id_table);
    var champ=matable.getElementsByTagName("input");
     
    for(i=0;i!=fin_de_mois;i++){
    somme+=parseInt(champ[i].value);
    };
    :

  6. #6
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par javatwister
    :
    Il dit qu'il veux des sommes par colonne JT. Ta solution ne fonctionne pas directement, mais je pense qu'il peut quand même y arriver

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ah oui tiens, je suis à la masse...


    bah, sinon, ça rejoint le pbm du compère lemmings l'autre jour!

    ==> Attribution d'un id avec un repère fixe selon la colonne, récupération des cellules (toutes, forcément, dans un premier temps) puis sélection via l'id;

    éventuellement, création d'un attribut unique selon la colonne et boucle sur tous les éléments possédant cet attribut;

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par denisC
    Citation Envoyé par javatwister
    :
    Il dit qu'il veux des sommes par colonne JT. Ta solution ne fonctionne pas directement, mais je pense qu'il peut quand même y arriver
    oui tout a fait.
    mais en fait ma question n'est pas comment faire, çà c'est fait, et çà marche ; mais je voulais juste savoir qu'elle etait la méthode la plus rapide ?
    faire des getElementById ou bien des table.rows.cell ?

  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 640
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    évite la syntaxe firstChild ... ou si tu le fais utilise un node cleaner ... voir FAQ ...

    colle leur un id fixe au moment de leur génération dynamique et utilise getElementById

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    je ne trouve pas ce que tu appelles node cleaner dans la FAQ JS ?

  11. #11
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par mik007
    je ne trouve pas ce que tu appelles node cleaner dans la FAQ JS ?
    Projet de FAQ. C'est l'un des premiers threads de ce forum.

    A partir de la:
    http://www.developpez.net/forums/vie...860360#1860360

    Jt et moi débatons du NodeCleaner.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Si le 1er affichage de la page te gêne, pourquoi ne pas calculer sur le serveur avant l'envoi de celle-ci ?

Discussions similaires

  1. [MySQL] parcours de tableau associatif export csv
    Par littlebouda dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/12/2007, 17h16
  2. [Tableaux] Parcours de tableau multidimension
    Par grunk dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2007, 10h30
  3. Recherche et parcours de tableau
    Par LEK dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 31/05/2007, 21h41
  4. Code javascript qui parcours un tableau
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/03/2006, 08h46
  5. [Debutant(e)]Pb parcours de tableau
    Par joquetino dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/09/2004, 09h08

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