Pregunta

Estoy tratando de hacer:

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

Está funcionando bien con cada navegador, excepto Opera (estoy ejecutando la última versión).

Examinando Internet, encontré personas que decían que Opera no admite InnerHTML. Eso no suena bien.

¿Algún consejo?

Gracias

Editar: Aquí está la identificación que estoy tratando de obtener

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

Edición2: Tengo el mismo problema con:

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

Edición3:

<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>";
    }
}

Edición4: Si elimino el if (window.opora), funcionará bien en FF e IE

¿Fue útil?

Solución

Encontró el problema:

El nodo de envoltura no estaba correctamente cerrado.

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

Afaik, FF e IE estaban fiando cortésmente la etiqueta ... pero la ópera no era, por lo que el niño Div no era realmente un elemento en el DOM.


Debería funcionar bien. ¿Cuál es el elemento con el "text de encabezado" de ID? ¿Estás seguro de que solo hay una coincidencia y tiene contenido editable?

¿Puedes publicar parte del marcado para que podamos probar?

Desde el sitio de PPK, no parece haber ningún problema de ópera:http://www.quirksmode.org/dom/innerhtml.html

Actualizar: Ejecutar este código en Opera 9.6.4 en XP funciona bien para mí.

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

Otros consejos

Me encontré con un problema algo relacionado y encontré que estaba relacionado con los valores codificados HTML. Por ejemplo, cuando el InnerHTML contenía "" en lugar de un espacio, el InnerHTML volvería ligeramente diferente (lo que confirmé probando la longitud del InnerHTML).

Esto es lo que encontré al tratar de obtener el interno de una etiqueta que contenía un solo DIV envolviendo un espacio no roto codificado (u003Cdiv>u003C/div> )

<div> </div>

El ejemplo anterior muestra cómo Opera 10.26 devolvería InnerHTML, y cuando verifiqué la longitud, devolvería 12 en Opera

<div>&nbsp;</div>

Así es como todos los demás navegadores que utilicé devolverían InnerHTML (IE6/7/8, Firefox 3.x, Chrome, etc.), y cuando verifiqué la longitud devolvería 17 en todos estos otros navegadores.

Editar: ¿Cómo estás llamando a esta función? ¿Lo estás llamando en el documento? <head>, al final de <body>, Estas usando window.onload?

innerHTML no es un atributo W3C-Válido (estará en HTML 5). Fue creado por Microsoft y es compatible con la mayoría Otros navegadores por razones de compatibilidad.

Dicho esto, creo que la ópera es compatible innerHTML, sin embargo, algunos google sugieren que está roto en ciertas versiones. Intente actualizar su versión de Opera y vea si funciona entonces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top