Question

J'essaye de faire:

document.getElementById("header-text").innerHTML = "something interesting";

Cela fonctionne bien avec chaque navigateur sauf Opera (j'exécute la dernière version).

En parcourant Internet, j'ai trouvé des gens qui disaient que l'opéra ne prend pas en charge InnerHTML. Cela ne semble pas bien.

Des pointeurs?

Merci

Éditer: Voici l'identifiant que j'essaie d'obtenir

<div id="header-text" class="picture-text">
          <!--[if gt IE 5]>ugly hack<![endif]-->
          Some text generated server side
         <!--[if gt IE 5]>ugly hack<![endif]-->
</div>

Edit2: J'ai le même problème avec:

<div id="header-text" class="picture-text">
          Static text
</div>

Edit3:

<body onload="intialize();">


function intialize() {
    operaHeaderFix();
}


function operaHeaderFix(){
    if(window.opera) {
        /*opera specific action*/ 
        document.getElementById("picture-line-wrapper").style.position="relative";
        document.getElementById("picture-line-wrapper").style.top="0px";
        document.getElementById("picture-line-wrapper").style.marginTop="-230px";
        document.getElementById("picture-line").style.padding="1px";
        document.getElementById("header-text").innerHTML = "<div style='margin:220px 0px 0px 20px;'>"+document.getElementById("header-text").innerHTML+"TEST</div>";
    }
}

Edit4: Si je supprime le if (window.opera), il fonctionnera bien en ff et ie

Était-ce utile?

La solution

J'ai trouvé le problème:

Le nœud d'emballage n'a pas été correctement fermé.

<div att1="value" att2="value"
  <div id="header-text">...</div>
</div>

Afaik, FF et IE réparaient poliment l'étiquette ... mais l'opéra ne l'était pas, donc l'enfant Div n'était pas vraiment un élément du Dom.


Devrait bien fonctionner. Quel est l'élément avec l'ID "En-tête-texte"? Êtes-vous sûr qu'il n'y a qu'une seule correspondance et qu'il a un contenu modifiable?

Pouvez-vous publier une partie du balisage pour que nous puissions tester?

Sur le site de PPK, il ne semble pas y avoir de problèmes d'opéra:http://www.quirksmode.org/dom/innerhtml.html

Mise à jour: L'exécution de ce code dans Opera 9.6.4 sur XP fonctionne bien pour moi.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>innerHTML test</title>
<script>
  function doIt(){
    document.getElementById("header-text").innerHTML = "something interesting";
  }
</script>
</head>
<body>
  <div id="header-text" class="picture-text">
    Static text
  </div>
  <input type="button" value="Change It" onclick="doIt();"/><br/>
</body>
</html>

Autres conseils

J'ai rencontré un problème quelque peu lié et je l'ai trouvé lié aux valeurs codées HTML. Par exemple, lorsque l'InnerHTML contenait "" au lieu d'un espace, l'InnerHTML reviendrait légèrement différent (ce que j'ai confirmé en testant la longueur de l'InnerHTML).

Voici ce que j'ai trouvé en essayant d'obtenir l'innerhtml d'une balise qui contenait une seule div enroulant un espace non décomposé (u003Cdiv>u003C/div> ):

<div> </div>

L'exemple ci-dessus montre comment Opera 10.26 retournerait innerhtml, et lorsque j'ai vérifié la longueur, il reviendrait 12 dans l'opéra

<div>&nbsp;</div>

C'est ainsi que tous les autres navigateurs que j'ai utilisés retourneraient InnerHTML (IE6 / 7/8, Firefox 3.x, Chrome, etc.), et lorsque j'ai vérifié la longueur, il reviendrait 17 dans tous ces autres navigateurs.

EDIT: Comment appelez-vous cette fonction? L'appelez-vous dans le document <head>, à la fin de <body>, Utilises-tu window.onload?

innerHTML n'est pas un attribut w3c-valide (il sera dans HTML 5). Il a été créé par Microsoft et est simplement pris en charge par plus Autres navigateurs pour des raisons de compatibilité.

Cela dit, je crois que l'opéra soutient innerHTML, Cependant, certains Google suggèrent qu'il est brisé dans certaines versions. Essayez de mettre à jour votre version d'opéra et voyez si cela fonctionne alors.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top