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 :

String se mute en objet


Sujet :

jQuery

  1. #1
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut String se mute en objet
    Ôyé Ôyé

    Il fallait bien que ça m'arrive un jour, une situation que je ne comprends absolument pas...

    Le code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="test_A" >test</div>
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var p_id = $("#test_A").attr("id");
    alert(p_id);
    $('#test_A').append("<scrip" + "t" + ">alert(" + p_id + ");</"+"script>");

    Alors, voilà le jsfidle.

    La question : Pourquoi les deux alertes ne donne pas le même résultat ?

    • Question subsidiaire 1 : Pourquoi p_id deviens un objet ???!!!
    • Question subsidiaire 2 : comment avoir l'id en string dans le deuxième alertes.


    J'avoue que là... j'ai du manquer un chapitre quelques part.

    Bonne...... chance
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    sans plus d'explication
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var p_id; // doit être globale
    $(window).load(function(){
      p_id = $("#test_A").attr("id");
      alert(p_id);
      $('#test_A').append("<scrip" + "t" + ">alert( p_id);</"+"script>"); // sans les guillemets fait référence à la variable
    });

  3. #3
    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 : 74
    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
    Bonsoir

    Il est mutin ce string !

    Et le modérateur n'est pas dans le bon forum !

    Avec un console.log() c'est beaucoup plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $( function(){
    	 var p_id =  $( "#test_A" ).attr( "id" );
     
    	 console.log( p_id );
     
    	 $( "#test_A" ).append( '<script>console.log(' + p_id + ');<\/script>' );	
     
    	 $( "#test_A" ).append( '<script>console.log("' + p_id + '");<\/script>' );						
    });
    donne :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="test_A">
        test
        <script>console.log(test_A);</script>
        <script>console.log("test_A");</script>
    </div>

    le premier script affiche toute la division dans la console, donc c'est un objet du DOM.

    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.)

  4. #4
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    Ha d'accord, bon bah la c'est plus clair.

    En fait la réponse est là : http://jsfiddle.net/NBTef/5/

    Un objet avec un ID en HTML, est directement accessible par sont nom en javascript, alors là, j'apprends quelques chose !

    C'est bon à savoir. Merci bien
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Attention toutefois DANGER car risque de collision
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <head></head>
    <body>
    <div id="test_A">
    Contenu de la DIV test_A
    </div>
    <script>
    var test_A = "Chaine contenant test_A";
    alert(test_A);
    alert( document.getElementById('test_A').innerHTML);
    </script>
    </body>
    </html>

  6. #6
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    Oui, en effet.

    Mais je me demande pourquoi ça a été implémenté de cette façon.

    Quand on créer un objet HTML, avec un ID : Est ce une mauvaise pratique de déclarer une variable avec le même nom en JS ?

    Quelqu'un aurait de la doc officiel à ce sujet ? (je vais chercher de mon coté)
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  7. #7
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    déjà à la base sur les anciennes versions de IE il était fortement déconseillé de nommer des id uniquement numériques car il y avait conflit avec un nommage interne des éléments DOM dans IE.
    Ensuite nommer une variable avec le même nom qu'un id est en effet source de conflits.
    c'est comme appeler une variable split ...
    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 !

  8. #8
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    ça fait partie des standards en plus
    Voici ce que la spéc. dit si la propriété ne se trouve pas dans l'objet global window :
    check de l'attribut name des éléments a, applet, area, embed, form, frameset, img, and object du DOM actif
    OU check de l'attribut id de tous les éléments du DOM actif.

    => c'est censé prendre le premier qui vient. Donc, si l'objet global window ne contient pas encore la propriété 'test_A' :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="test_A"></form>
    <div id="test_A"></div>
     
    console.log(test_A); // HTMLFormElement
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div id="test_A"></div>
    <form name="test_A"></form>
     
    console.log(test_A); // HTMLDivElement
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <span name="test_A"></span>
    <div id="test_A"></div>
     
    console.log(test_A); // HTMLDivElement
    Par contre, ça ne semble pas être respecté à la lettre :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a name="test_A"></a>
    <div id="test_A"></div>
     
    console.log(test_A); // HTMLDivElement (Gecko et Webkit) au lieu de HTMLAnchorElement

    Après avoir fouillé dans les bugzilla et cie, c'est une fonctionnalité sortie avec IE afin d'éviter au développeur d'avoir à taper document.getElementById('monId') mais simplement monId pour accéder à l'élément. De plus, les développeurs se sont servis de ça pour un fallback à un élément object plutôt que d'utiliser l'élément embed. Comme c'était utilisé par beaucoup de gros site (napster, par exemple), le grand dilemme du "j'implémente ce troll non standard ?" ou alors "je ne l'implémente pas mais je ferme la porte à tous les utilisateurs qui iront visiter des sites développés sous le format IE" ... donc j'implémente le gros troll pas beau. Firefox l'a implémenté en Quirks mode au départ, mais l'a lâché en mode standard avec Firefox 14. Même Webkit ne semble pas prêt à le passer en Quirks mode et pour finir IE a même fait une démo sur canvas en utilisant ce truc abjecte (Bien sûr, qui ne fonctionnait pas encore sur Gecko en mode standard)

    Et pour finir sur l'état actuel des choses, un post de Jonas Sicking (Mozilla, participant aux spéc. du W3C) :
    This is also a great example of if the spec had said something different we actually would have stood a chance of fixing this right. As things were, evangelism was impossible. Both to authors and to browser implementers.
    En clair, ce n'est pas demain que ça changera pour le coup. C'est le parfait exemple de "C'est la spéc. qui s'est adaptée aux non-standards" car trop de monde utilisaient le non-standard qui est donc devenu standard !

  9. #9
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    Super, merci pour toutes ces précisions Kaamo

    Et on a enfin une vrai réponse

    c'est une fonctionnalité sortie avec IE afin d'éviter au développeur d'avoir à taper document.getElementById('monId') mais simplement monId pour accéder à l'élément.
    Ces développeurs, je vous jure
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Merci Kaamo pour cette recherche et cette retranscription de référence

  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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    c'est une fonctionnalité sortie avec IE
    ce n'est la la faute du développeur, c'est encore un création fantaisiste d'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 !

  12. #12
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    c'est encore un création fantaisiste d'IE !
    C'est malheureusement vrai. Mais je comprends les développeurs de l'époque, quelque part ... Sans jQuery et consorts, il devait être tentant d'utiliser ce raccourci, surtout qu'IE était un monstre en part de marché de l'époque. C'était lui, le standard

  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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    Donc si les standars sont liés au pouvoir et que les standards te disent de te jeter de la falaise ?
    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 Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Alors pourquoi les standards disent de se jeter de la falaise car IE a dit qu'il fallait le faire ?
    Ils se rendront bien compte un jour qu'il faut retirer ce bout de standard, non ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/12/2015, 12h46
  2. Réponses: 1
    Dernier message: 16/03/2012, 07h39
  3. Récupérer un tableau de String provenant d'un objet COM .net
    Par ricky78 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 01/02/2012, 12h47
  4. Différence entre les propriétés String et Value des objets Uicontrol
    Par occor dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/01/2008, 12h13
  5. Comment tester qu'un objet String est bien initialisé
    Par Jones dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 17/09/2004, 11h29

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