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] Les valeurs chaînes du DOM ne sont pas toujours des objets chaînes


Sujet :

JavaScript

  1. #1
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut [DOM] Les valeurs chaînes du DOM ne sont pas toujours des objets chaînes
    Bonjour touti li mondi,

    Je n'ai pas beaucoup pratiqué DHTML jusque maintenant, alors je découvre...

    Si quelqu'un rencontre le même phénomène, ce commentaire pourra aider :

    Les valeurs string ne sont pas toujours des objets string. Par exemple, le code suivant
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var attrName;
    attrName = attrs[i].name;
    if (attrName.indexOf('xxxx') == 0) { /* Une erreur d'execution se produit ici */
       ....
    }
    ne fonctionne pas, mais celui
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var attrName;
    attrName = new String(attrs[i].name); /* Convertion en objet chaîne */
    if (attrName.indexOf('xxxx') == 0) {  /* Maintenant ça fonctionne */
       ....
    }
    fonctionne.

    Il faut donc explicitement convertir la valeur chaîne en objet chaîne.

    Dans le premier cas, Internet Explorer renvoie une erreur signalant que attrName n'est pas un objet ou qu'il a la valeur null : « Erreur : 'undefined' a la valeur Null ou n'est pas un objet. ». L'erreur se produit au moment de l'instruction de test attrName.indexOf('xxxx').

    Je n'avais jamais vu ce point apparaître explicitement dans les références que j'ai consulter... ou alors je n'avais pas consulté les bonnes références, ou alors je les avais mal lu...

    Note à monsieur developpez.net : il me semble qu'il y a un bug de la coloration syntaxique, car quand un commentaire JavaScript contient "<-", tout le reste du topic se colore en vert.
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  2. #2
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Oops, il y a une incohérence :

    Avec substring, si je fais
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var attrName;
    attrName = attrs[i].name;
    xxx = attrName.substring (...); /* Ok, ça marche */
    ça fonctionne, et là, aucune convertion n'est nécéssaire.

    C'est seulement avec indexOf que ça ne fonctionne pas :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var attrName;
    attrName = attrs[i].name;
    xxx = attrName.indexOf (...); /* IE proteste que attrName n'est pas un objet :-/ */

    Pourtant indexOf et substring sont toutes deux des méthodes de String.

    Alors pourquoi ais-je une erreur si j'applique directement indexOf, alors que cela fonctionne si j'applique directement substring. Ou en d'autre termes, pourquoi suis-je obligé de faire une convertion pour appliquer indexOf, alors que ce n'est pas nécéssaire pour appliquer substring ?

    La méthode indexOf aurait-elle un status particulier ? substring serait-elle plus naturelle ?

    C'est complétement incohérent :-/ J'y perd mon Latin... heuu... mon JavaScript
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  3. #3
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Je viens de trouver

    En fait, c'est assez « vicieux » (pardonnez moi le terme, mais ici il est justifié).

    La réponse :
    Quand vous faites une instruction du genre
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var attrs;
    attrs = element.attributes;
    for (i in attrs) {
       .... some work on attrs[i], e.g. like indexOf(attrs[i].name)
    }
    le tableaux attrs peut contenir des valeurs null (oui, c'est idiot, mais c'est comme ça), et même encore quand une entrée du tableau n'est pas null, la propriété name peut être null (encore plus fous).

    Qu'il y ait des entrées null dans la liste des attributs est déjà étrange, mais alors qu'un attribut puisse en plus avoir un name null est encore plus incompréhensible.

    En conclustion il faut faire
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var attrs;
    attrs = element.attributes;
    for (i in attrs) {
       if (attrs[i] != null) { // oui, ça peut être null
          if (attrs[i].name != null) { // hé re-oui, oui, ça peut être null là aussi
             .... some work on attrs[i], e.g. like indexOf(attrs[i].name)
          }
       }
    }

    Mais par quelles diableries est-il possible qu'un attribut ait un name s'évaluant à null ? Et au passage, comment se fait-il que le tableau d'attribut ait des entrées null ?

    J'aimerais beaucoup comprendre, ... et la première question est la plus importante il me semble.
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/01/2014, 23h16
  2. [WD16] Les valeurs de la combo ne sont pas rechargées
    Par fontag dans le forum WinDev
    Réponses: 26
    Dernier message: 26/04/2011, 11h00
  3. [LINQ to SQL] les valeurs de la table ne sont pas mises à jour
    Par Paul Van Walleghem dans le forum Accès aux données
    Réponses: 0
    Dernier message: 24/02/2009, 11h39
  4. Toutes les valeurs d'une requête ne sont pas traitées
    Par Lunaden dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/06/2008, 16h03
  5. [DOM] Comment modifier via le DOM les attributs d’un champ INPUT ?
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2008, 13h47

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