2009-06-03 7 views
1

ich versuche zu tun:.innerHTML Opera Problem?

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

Es funktioniert mit jedem Browser außer Opera in Ordnung (ich die neueste Version ausgeführt wird).

Beim Surfen im Internet fand ich Leute, die sagten, dass Opera innerHTML nicht unterstützt. Das klingt nicht richtig.

Irgendwelche Zeiger?

Dank

bearbeiten: Edit3

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

: Hier ist die ID Ich versuche zu bekommen

<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: Ich habe das gleiche Problem mit:

<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: Wenn ich die if (window.opera) entfernen, wird es in FF und IE gut laufen

+0

Welche genaue Version von Opera haben Sie? – scunliffe

+0

Ich habe 9.64 unter Windows XP – marcgg

+0

Ich habe gerade auf 9,64 aktualisiert (auf XP) und lief Ihren statischen Div/JS-Test ... und es hat gut funktioniert. Es muss etwas anderes passieren. – scunliffe

Antwort

2

DAS PROBLEM GEFUNDEN:

Der Wickel Knoten war nicht richtig geschlossen.

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

AFAIK, FF und IE reparieren höflich den Tag ... aber Opera war nicht, damit das Kind DIV nicht wirklich ein Element im DOM war.


Sollte gut funktionieren. Was ist das Element mit der ID "header-text"? Sind Sie sicher, dass es nur eine Übereinstimmung gibt und editierbarer Inhalt vorhanden ist?

Können Sie etwas Markup veröffentlichen, damit wir es testen können?

Von PPK Website scheint es keine Oper Fragen zu sein: http://www.quirksmode.org/dom/innerhtml.html

Update: Ausführen dieses Code in Opera 9.6.4 auf XP funktioniert gut für mich.

<!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> 
+0

Dies ist das einzige Spiel. Es gibt konditionale Kommentare ( usw.) in der es dachte, könnte das ein Problem sein? – marcgg

+0

bearbeitet die Frage, um die div – marcgg

+0

das ist wirklich seltsam ... Aktualisiert die Frage zu enthalten, wie ich die Funktion aufrufen. Danke für deine Hilfe – marcgg

0

Edit: Wie rufen Sie diese Funktion? Rufen Sie es in dem Dokument , am Ende der <body>, verwenden Sie window.onload?

innerHTML ist kein w3c-gültiges Attribut (es wird in HTML 5 sein). Es wurde von Microsoft erstellt und wird nur von meisten anderen Browsern aus Kompatibilitätsgründen unterstützt.

Das sagte, ich glaube, Opera unterstützt innerHTML, aber einige Googeln schlägt vor, dass es is broken in certain versions. Versuchen Sie, Ihre Version von Opera zu aktualisieren, und sehen Sie, ob es dann funktioniert.

+0

Wie ich schon sagte, ich benutze die neueste Version von Opera – marcgg

+0

(Ich sah diesen Forenbeitrag beim googeln und aktualisiert ^^ Habe noch nichts behoben) – marcgg

+0

habe meine Fragen aktualisiert, wie ich die Funktion – marcgg

2

Ich stieß auf ein etwas verwandtes Problem und fand es mit HTML-codierten Werten verwandt. Zum Beispiel, wenn die innerHTML enthielt "& nbsp;" statt eines Leerzeichens würde die innereHTML etwas anders zurückkommen (was ich durch Testen der Länge von innerHTML bestätigt habe). Hier

ist, was ich gefunden beim Versuch, die innerHTML- eines Tags zu erhalten, die ein einzelnes DIV Umwickeln eines codierten non-breaking Raum enthalten (<div> & nbsp; </div >):

<div> </div> 

das obige Beispiel zeigt, wie Opera 10.26 würde innerHTML- zurückzukehren, und wenn ich die Länge geprüft würde es 12 in Opera zurückkehren

<div>&nbsp;</div> 

Dies ist, wie alle anderen Browser habe ich wo Uld Return innerHTML (IE6/7/8, Firefox 3.x, Chrome, etc.), und wenn ich die Länge überprüft, würde es 17 in all diesen anderen Browsern zurückgeben.

+1

nenne (Dies ist ein bekannter Fehler in Opera, sollte für Opera 11 oder kurz danach behoben werden) – hallvors