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 :

La méthode getElementById() est devenue inutile ?


Sujet :

JavaScript

  1. #21
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    et qu'on le veuille ou non cette variable existe bel et bien quel que soit le navigateur (à jours en 2018) qu'on puisse utiliser.

    Conclusion on à intérêt à faire gaffe aux nom des ID que l'on attribue (dans la partie HTML) sinon on risque d'éventuelles collusions dans son code JS, ou de réaffecter par erreur ces variables déjà existantes
    Une collision dans ce sens c'est à vérifier mais j'en doute car je pense que dans ce cas la variable déclarée dans le code JS l'emporterait... En fait si ça se trouve il n'y aura même pas de création de variable correspondant au ID si il existe déjà une variable du même nom dans le code JS...

    PS : Sinon pour ce qui est des noms de variable, fonction... Si ils sont longs ce n'est pas grave, non ? Puisqu'ils sont raccourcis à la minification ?

  2. #22
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    je pense que dans ce cas la variable déclarée dans le code JS l'emporterait...
    la réponse en testant
    cas 1:
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      "use strict";
      var Nv_P = document.createElement("p")
      Nv_P.id  = 'toto';
      id_Block_DIV.appendChild(Nv_P);
     
      toto.innerText = 'paragraphe toto';  // sera écrit dans le paragraphe
      console.log(typeof toto);           // --> object

    cas 2:
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      var toto = 15;
     
      var Nv_P = document.createElement("p")
      Nv_P.id  = 'toto';
      id_Block_DIV.appendChild(Nv_P);
     
      toto.innerText = 'paragraphe toto';  // ne sera pas écrit dans le paragraphe
      console.log(typeof toto);           // --> number

    cas 3:
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     "use strict";
      var toto = 15;
     
      var Nv_P = document.createElement("p")
      Nv_P.id  = 'toto';
      id_Block_DIV.appendChild(Nv_P);
     
      toto.innerText = 'paragraphe toto';  // TypeError: can't assign to property "innerText" on 15: not an object

  3. #23
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Merci pour les tests...
    Alors ils confirment que la variable déclarée dans le code JS l'emporte...
    A priori donc il n'y a pas de collision dans l'autre sens...

    Même si je m'en doutais (comme déjà dit) c'est toujours bien d'avoir confirmation...

  4. #24
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    ben pas pour moi le sujet de départ n'est pas celui là, revoit le titre que tu as mis.
    Méfie toi, les titres sont souvent trompeurs.

    Je ne pense pas être le seul à abuser mes lecteurs sur la réalité d'un questionnement plus profond, et qui ne peut que s'éloigner de la formulation obligatoirement simpliste de son titre.

    Par exemple:
    - Les Trois Mousquetaires, d’Alexandre Dumas… ==> ils sont 4 en réalité.

    - À la recherche du temps perdu, de Marcel Proust ==> il ne donne aucune recette magique qui permetrait, a minima, de retouver le temps passé à lire ses 7 volumes...

    - Au-dessous du volcan, par Malcolm Lowry ==> je l'ai lu, et le héros ne touche jamais la moindre pelle pour creuser le moindre trou, ne serait-ce qu'une esquisse.

    - Alcools, de Guillaume Apollinaire ==> très décevant, il n'y a aucune recette de cocktails

    - Traité du zen et de l'entretien des motocyclettes, de... inutile d'en parler, le titre parle de lui même : faudra s'accrocher pour y trouver du sens, et dèjà trouver le guidon.

  5. #25
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    et bien ce n'est pas particulièrement pour en remettre une couche,
    mais j'ai trouvé une troisième méthode pour accéder directement en JS aux éléments d'une page html

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html lang="fr">
    <head><meta charset="UTF-8" /></head>
    <body>
      <span id="truc-bidule'">texte initial...</span>
      <script>
        "use strict"
        window['truc-bidule'].textContent = 'bla bla bla';
      </script>
    </body></html>
    et cela permet de différentier directement les éléments HTML des variables JavaScript, sans risque de collusion.
    (ou de se contraindre à utiliser des règles d'écriture comme le préconise danielhagnoul )

    Ce langage m'étonnera toujours !

    (et du coup la méthode getElementById() en est presque devenue inutile )

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Merci pour les tests...
    Alors ils confirment que la variable déclarée dans le code JS l'emporte...
    A priori donc il n'y a pas de collision dans l'autre sens...
    On peut aussi en conclure qu’un script qui s’appuie sur cette fonctionnalité n’est pas future-proof. Si je déclare une <div id="Cabbage"> et que demain les navigateurs se mettent à ajouter un objet Cabbage dans le contexte global, mon script ne marchera plus.
    … Et je mettrai un certain temps à comprendre pourquoi.
    … Et ça va demander pas mal de refactoring, et donc introduction potentielle de nouvelles erreurs.
    Bref, c’est pas une bonne idée d’un point de vue maintenance.

    Edit :
    Citation Envoyé par psychadelic Voir le message
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    window['truc-bidule'].textContent = 'bla bla bla';
    C’est deux faits simples :

    1. Sur tout objet, l’accès à une propriété peut se faire soit avec la syntaxe obj.prop, soit obj['prop']. L’exception est quand le nom de la propriété contient des caractères qui ont un sens en JS, en l’occurence le -. Là on ne peut utiliser que la seconde syntaxe.

    2. Toute variable globale (implicitement ou déclarée avec var) est également une propriété de window. Par exemple, si je déclare var machin dans le contexte global, je peux également y accéder via window.machin, et donc aussi window['machin']. (Note : ça ne marche pas avec let.)
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [méthodes]Qu'est ce que les specs d'un projet ?
    Par débutant_en_C dans le forum Méthodes
    Réponses: 18
    Dernier message: 08/01/2010, 17h52
  2. IE est devenu fou :(
    Par kagura dans le forum IE
    Réponses: 13
    Dernier message: 06/08/2006, 15h19
  3. Réponses: 5
    Dernier message: 04/07/2006, 10h17
  4. Réponses: 2
    Dernier message: 31/05/2006, 18h49
  5. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55

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