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 :

[DOM] Récup. d'index dans document.form.elements


Sujet :

JavaScript

  1. #1
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut [DOM] Récup. d'index dans document.form.elements
    Bonjour,
    Après recherche infructueuse, je me demande s'il existe une fonction qui me permettrait de récupérer (directement sans balayer toute la table) l'index d'un control dans la table document.form.elements à partir de son id ou name !
    Je suis en train d'essayer d'optimiser un javascript monstrueux qui balaye une JSP (non moins monstrueuse) contenant 660 controls
    Bon c'est une page extraite d'une appli pro, contenant une liste de 8 occurrences de 60 colonnes, ce qui explique en partie la taille de la page.
    Merci de votre aide.
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    non.
    Quel est le but de la recupération de l'index ?
    ne peux tu pas t'en passer en passant this en paramètre ?
    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 !

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    document.getElementById("tonid")
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  4. #4
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    La récup d'index me permettrait de commençait le balayage des controls (ce balayage sert à locker ou non les champs du bas de la page en fonction d'un paramétrage) à partir de celui qui m'intéresse. C'est environ le 120ème de la page, mais susceptible d'évoluer dans le temps, je ne peux donc pas me contenter d'une valeur en dur... L'idée c'est qu'au lieu de lancer une boucle à partir de l'index 0, je la démarre à partir du champ qui m'intéresse, ce sera déjà ça de gagné en temps.
    Je vois pas bien le coup du "this" ?!
    a+
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  5. #5
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    document.getElementById("tonid")
    Hum, désolé mais je ne pense pas pouvoir récupérer l'index dans document.form.elements avec cette fonction... Si c'est possible, merci de me dire comment
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    sous IE ce serait possible avec l'id porpre attribué par IE dans son DOM ...

    sinon il faudrait un nommage ou une identification rationnels des elements ...

    sinon si tes elements ont tous le même name c'est jouable

    on peut voir un bout du html avec quelques éléments ?
    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 !

  7. #7
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    hups autant pour moi effectivement ... mal compris la question je pensais que tu souhaitais juste accéder a ton élément.

    de plus pour locker 600 éléments , j'avais fait la démo d'un test avec boucle optimisé sur 10000 élements , j'arrivais a a peine 500ms ( donc 0,5 secondes ... )
    je pense que le balayage est envisageable dans ton cas ...
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  8. #8
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sous IE ce serait possible avec l'id porpre attribué par IE dans son DOM ...
    ca m'intéresse car l'appli n'est prévue que pour IE (oui je sais...). tu peux détailler un peu la manip, je ne connais pas trop ce concept de DOM RE-

    --> le_chomeur : chapeau parce que dans mon cas, pour 660 éléments le temps est d'environ 3.5 secondes (sur un P4 2Ghz avec 2Go de RAM) !!! Ceci dit, ce n'est pas une simple boucle, il y a pas mal de code dedans...
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  9. #9
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    montre nous ton code , on pourra surement l'améliorer
    petit conseil => stock tes objets dans un array plutôt que de les parcourirs gain de temps => x10
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  10. #10
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    essaye avec sourceIndex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='text' onclick="alert(this.sourceIndex)" />
    à à l'air de donner un bon resultat sous IE
    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 !

  11. #11
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           <input type='text' onclick="this.form.elements[this.sourceIndex-142].style.backgroundColor='red'" />
    142 etant le sourceIndex du premier element du formulaire
    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 !

  12. #12
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    et pour firefox on peut faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    window.onload=function() {
    //récupération de tous les éléments de la pages
      var MesElements=document.getElementsByTagName('*');
      //Ajout de la propriété sourceIndex
      for (var i=0,l=MesElements.length;i<l;i++) e[i].sourceIndex=i;
    }
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  13. #13
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    lol fillot ...
    mais inutile puisque c'est prévu uniquement pour IE ...
    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 !

  14. #14
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function getIndex(nomchamp,formulaire){
    index=0;
    for(i=0;i<formulaire.elements.length;i++){
    if(formulaire.elements[i].name==nomchamp)
    {index=i;
    }
    }
    return index;
    }
    un truc de ce genre?

  15. #15
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Merci à tous
    SpaceFrog, j'essaie ton truc après le repas, ça m'a l'air pas mal du tout
    Matthieu2000 et le_chomeur, merci mais l'idée est d'avoir un ordre propre qui ne nécessite pas de balayer la boucle, sinon l'opti sera minime
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  16. #16
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    lol fillot ...
    mais inutile puisque c'est prévu uniquement pour IE ...
    oui mais quand même je suis pour la paix des navigateurs
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  17. #17
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Hello,
    Me revoilou avec mon problème
    sourceIndex est une bonne solution, sauf que visiblement il ne compte pas les éléments de la même manière que form.elements
    Exemple :
    Admettons que mon form débute au sourceIndex = 100.
    En balayant document.form.elements je récupère pour le control qui m'intéresse l'"index" 137, mais sourceIndex de cet élément renvoie 447 (soit 210 de trop en absolu par rapport au début du form...)
    Argh, ça me gave bien...
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  18. #18
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    j'ai pourtant bien précisé en relatif par rapport au premier element du form, tu dois pouvoir l'automatiser


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var firstElement=document.forms[0].elements[0].sourceIndex
    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 !

  19. #19
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Je vais essayer de donner le cas concret

    J'exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    iform = document.ps57Form.elements[0].sourceIndex;
    ilibref = document.getElementById("libRefPrestation").sourceIndex;
    ilf = document.getElementById("lastFocus").sourceIndex;
    ics = document.getElementById("codeSite").sourceIndex;
    iligne = document.getElementById("ligneActive[0]").sourceIndex;
    Ca me restitue :
    iform = 201
    libRefPrestation = 207
    lastFocus = 208
    codeSite = 209
    ligneActive[0] = 447

    Si je fais un vidage de document.form.elements (tout bête en balayant de 1 en 1 puis en faisant un alert sur chaque occurrence), je récupère :
    1 - libRefPrestation
    2 - lastFocus
    3 - codeSite
    ...
    137 - ligneActive[0]

    Si je compte avec le sourceIndex index de ligneActive[0] = 447 - 201 = 236, alors que la position dans doucment.form.elements = 137 !!!!!!

    Donc je pense que sourceIndex compte des éléments qui n'apparaissent pas dans document.form.elements
    Le Vélo c'est sur : http://www.plani-cycles.fr/ !

  20. #20
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    le but final de récupérer les index ???
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

Discussions similaires

  1. Index dans objets form
    Par KaloOopS dans le forum C#
    Réponses: 9
    Dernier message: 08/11/2010, 12h47
  2. document forms elements
    Par lephotographe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/09/2008, 11h05
  3. Error :document.Form.elements has no properties
    Par makohsarah dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2007, 16h11
  4. [DOM] agir sur le DOM au changement d'une chaîne dans un FORM
    Par boteha dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 30/11/2005, 14h39

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