innerHTML не работает правильно в IE - PullRequest
0 голосов
/ 29 мая 2011

Я пытаюсь заполнить div с помощью innerHTML, который фантастически работает во всех браузерах, кроме IE (в частности, тестируется под 8 и 9).Я могу найти много информации по этой теме, но нет простых ответов.Кажется, иногда работает, если у меня нет никаких тегов в тексте, но никогда с.Может ли кто-нибудь помочь мне понять проблему и возможные пути ее решения?

<html>
<body>

    The following box should contain text populated with innerHTML,
    but doesn't in IE
    <p id="inner" style="width:250px; height: 100px;  margin: 20px auto; background-color: #fff; border:5px solid orange; padding:7px; text-align:left; }"></p>

    <script type="text/javascript">
        var txt = "<h1>Just a quick test!</h1>"  
        var inner = document.getElementById("inner");
        inner.innerHTML=txt;
    </script>

</body>
</html>

Ответы [ 4 ]

3 голосов
/ 29 мая 2011

Это ошибка на inner = document.getElementById("inner"); - если вы измените это на var inner = document.getElementById("inner");, это будет работать.

IE автоматически создает глобальную переменную inner из-за идентификатора элемента - он действительно не 'Похоже, вы пытаетесь присвоить ему что-то.

1 голос
/ 29 мая 2011

Сначала ваш html не завершен. Страница не имеет заголовка (<head>).

Во-вторых, запрограммируйте точно, используя запятую и точку с запятой везде, где вы можете. После объявления переменной в вашем коде не было пунктуации. Такие вещи могут сломать сценарий. В этом случае конфликт между window[inner] (внутренней переменной, созданной браузером) и вашей «внутренней» переменной. Отсутствие строки с запятой / дополнительной переменной var приводило в замешательство интерпретатор javascript, который пытался вставить точку с запятой во время интерпретации. Эта «вставка точки с запятой» рассматривается как один из основных недостатков javascript (см. Ссылки @bottom), но ее можно обойти дисциплиной программистов, чтобы всегда делать свою собственную вставку точки с запятой.

С немного большей точностью ваш скрипт выглядит так:

var txt = "Just a quick test!", //use a comma here
           inner = document.getElementById("inner"); 
           //use a semicolon to end var declaration block
inner.innerHTML = txt; //always end statements with semicolon

или

var txt = "Just a quick test!";
var inner = document.getElementById("inner");

То, что будет работать в IE.

Для дальнейшего чтения
Для дальнейшего чтения (2)

1 голос
/ 29 мая 2011

Нажмите F12, чтобы получить отладчик скрипта и просмотреть ошибки скрипта.Например, вместо того, чтобы пытаться присвоить, как вы надеялись, новую переменную с именем «inner» (которая фактически отображается на элемент документа с идентификатором «inner»), вы можете рассмотреть возможность использования фактически объявленной переменной?* После того, как вы их исправите, возможно, вы захотите отложить ваш скрипт до запуска OnLoad?

0 голосов
/ 22 декабря 2011

IE взрывается при попытке добавить HTML-код в тег P с помощью innerHTML.Для решения проблемы замените ваши P-теги на DIV.

...