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 :

Quand innerHTML se confond avec outerHTML


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    Par défaut Quand innerHTML se confond avec outerHTML
    Bonsoir tous/toutes,

    Je viens de remarquer un phénomène étrange, un phénomène au limite, qui peut tout à fait se produire, et pas seulement occasionelement : dans certains cas, innerHTML peut renvoyer ce qu'aurait renvoyé outerHTML.

    Ce n'est pas un phénomène mysthérieux dut à une quelconque courbure de l'espace temps, mais un phénomène qui se produit tout simplement quand l'élément sur lequel on applique innerHTML n'a pas de contenu.

    Dans les cas ou un élément surlequel on applique innerHTML est succeptible d'avoir un contenu strictement vide, alors il est préférable de faire plutôt
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var content;
    var element;
    element = ...;
    content = element.innerHTML;
    if (content == element.outerHTML) content = "";

    La comparaison avec element.outerHTML est obligatoire, car on ne peut bien sûre pas tester un innerHTML vide, puisque celui-ci renvois alors outerHTML qui n'est pas vide.

    Je constate ce phénomène avec des éléments tels que

    J'ai vraiment cru rêver... mais c'était bien là la source d'un bug étrange dans une application qui m'embêtait (note: je suis sous IE6).

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par Hibou57
    J'ai vraiment cru rêver...
    heu ... comment dire ça ?
    C'était bien le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <body onload="alert('/'+document.getElementById('div1').innerHTML+'/'+document.getElementById('div1').outerHTML+'/');">
    <div id="div1">
    </div>
    </body>
    m'affiche
    //
    <DIV id=div1></DIV>/
    Mais si tu fais un document.write() au lieu d'un alert(), forcément ...

    EDIT : testé aussi sous IE6
    EDIT BIS : dans le doute, j'ai testé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(document.getElementById('div1').innerHTML==document.getElementById('div1').outerHTML);
    qui renvoie bien ... false

    A+

  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
    Par défaut
    Citation Envoyé par E.Bzz
    Bonjour,
    heu ... comment dire ça ?
    C'était bien le cas
    Pourtant non, et ce n'était pas possible que je l'ignore. Je faisais par exemple B.innerHTML = A.innerHTML, et quand A était vide, B se retrouvait à contenir tout B, et pas seulement son innerHTML.

    J'ignore comment, mais c'est bien ce qui se passe. A l'affichage, je vois alors B être dupliqué dans A, alors que si son contenu n'est pas vide, c'est seulement le contenu de B qui est copié dans le contenu de A.

    Peut-être qu'il y a quelque chose dans l'application qui laisse IE6 dans un état bizarre alors. Mais pourtant il n'y aucune erreur d'execution pendant tout ce temps.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Ton "A" n'était peut être pas celui que tu croyais ...

  5. #5
    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
    Par défaut
    Citation Envoyé par E.Bzz
    Ton "A" n'était peut être pas celui que tu croyais ...
    Si, puisque le correctif que je donne fait que tout fonctionne normalement. Si le A n'était pas l'élément que je croyais, premièrement c'est toute l'application qui ne tournerait pas du tout rond (et je m'en serais aperçu), et en plus le correctif ne changerait rien à ce type d'erreur. Ors il fonctionne.

    Mais je crois que j'ai peut-être fait une erreur de parler de cette bizarrerie, peut-être que c'est trop bizarre pour en parler comme ça.

    Si j'arrive à en savoir plus (comprendre comment c'est possible), j'en reparlerai ici.

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Hibou57
    Si j'arrive à en savoir plus (comprendre comment c'est possible), j'en reparlerai ici.
    Et avec un exemple qu'on puisse reproduire, ça serait intéressant effectivement

    A+

  7. #7
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Hibou57
    J'ai vraiment cru rêver... mais c'était bien là la source d'un bug étrange dans une application qui m'embêtait (note: je suis sous IE6).
    de toutes façons, je crois que seul IE utilise (encore) outerHTML.

    Sur FF par exemple, ne reconnait que innerHTML.

    Pour rappel :
    http://www.developpez.net/forums/sho...d.php?t=279966

Discussions similaires

  1. [SP-2010] event receiver qui ne marche pas quand il est couplé avec un content type
    Par cekamb72 dans le forum SharePoint
    Réponses: 6
    Dernier message: 29/08/2011, 18h53
  2. Réponses: 3
    Dernier message: 29/04/2009, 08h35
  3. [AJAX] innerHTML, setInnerHTML
    Par Invité dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 26/06/2008, 11h11
  4. Agradir une image quand on passe dessus avec la souris
    Par The Molo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/10/2007, 13h51

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