.innerHTML оперный вопрос? - PullRequest
1 голос
/ 03 июня 2009

Я пытаюсь сделать:

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

Работает нормально со всеми браузерами, кроме Opera (у меня установлена ​​последняя версия).

Просматривая интернет, я обнаружил, что люди говорят, что Opera не поддерживает innerHTML. Это не звучит правильно.

Есть указатели?

Спасибо

Редактировать : Вот идентификатор, который я пытаюсь получить

<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 : у меня та же проблема с:

<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 : Если я удалю if (window.opera), он будет нормально работать в FF и IE

Ответы [ 3 ]

2 голосов
/ 04 ноября 2010

Я столкнулся с несколько связанной проблемой и обнаружил, что она связана со значениями в кодировке HTML. Например, когда innerHTML содержал «& nbsp;» вместо пробела innerHTML будет возвращаться немного иначе (что я подтвердил, проверяя длину innerHTML).

Вот что я нашел, пытаясь получить innerHTML тега, который содержал один DIV, оборачивающий закодированный неразрывный пробел (

& nbsp;
):
<div> </div>

В приведенном выше примере показано, как Opera 10.26 будет возвращать innerHTML, и когда я проверил длину, он вернет 12 в Opera

<div>&nbsp;</div>

Вот как все остальные браузеры, которые я использовал, возвращали innerHTML (IE6 / 7/8, Firefox 3.x, Chrome и т. Д.), И когда я проверял длину, он возвращал 17 во всех этих других браузерах. *

2 голосов
/ 03 июня 2009

НАЙТИ НОМЕР:

Узел переноса не был правильно закрыт.

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

AFAIK, FF и IE вежливо исправляли тег ... но Opera - нет, поэтому дочерний DIV на самом деле не был элементом в DOM.


Должно работать нормально. Что такое элемент с идентификатором "header-text"? Вы уверены, что есть только одно совпадение, и оно имеет редактируемый контент?

Можете ли вы опубликовать часть разметки, чтобы мы могли проверить?

С сайта ППК, похоже, нет проблем с Opera: http://www.quirksmode.org/dom/innerhtml.html

Обновление: Запуск этого кода в Opera 9.6.4 на XP работает нормально для меня.

<!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 голосов
/ 03 июня 2009

Редактировать: Как вы вызываете эту функцию? Вы называете это в документе <head>, в конце <body>, используете ли вы window.onload?

innerHTML не является допустимым атрибутом w3c (будет в HTML 5). Он был создан Microsoft и просто поддерживается большинством других браузеров по причинам совместимости.

Тем не менее, я считаю, что Opera поддерживает innerHTML, однако некоторые поиски в Google предполагают, что в некоторых версиях она не работает Попробуйте обновить свою версию Opera и посмотрите, будет ли она работать.

...