Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > innerHTML & getElementById


Автор: TrivialCore 25.10.2007, 11:13
Народ, срочная проблема под IE (6).

Короче добавляю кусок HTML, вставляя его в div:

div.innerHTML = someHtml;

В этом someHtml содержится <script id="someScript"> alert('helo!'); </script>

Проблема: Когда после вставки куска делаю document.getElementById("someScript"), ничего не возвращается.
Иначе говоря, после вставки в innerHTML браузер не распознает содержимого.

Как его заставить это делать? И вообще, почему так происходит, ведь тот же FF все считывает грамотно.

Желательно не использовать DOM. 

Автор: smartov 25.10.2007, 12:17
TrivialCore
у IE это известная проблема. Пробовал ее обойти без DOM - дично у меня не получилось.
Но зато вот такой код работает у меня в IE 6, может тебе это поможет.

Код

<html>
<body>

<div id="myDiv"></div>

<script type="text/javascript">

div = document.getElementById('myDiv');

sc = document.createElement("SCRIPT");
sc.type = 'text/javascript';
sc.text = 'alert("Hello!")';

div.appendChild(sc);

</script>

</body>
</html>

Автор: TrivialCore 25.10.2007, 14:09
smartov, DOM мне все же не катит, но зато нашел решение с использованием innerHTML:

Короче вот решение: http://msdn2.microsoft.com/en-us/library/ms533897.aspx

Надо добавить в тег script атрибут DEFER (!!), а вставляемую строку начать с "in-scope" элемента хтмл, например <input type="hidden"/> (!!!!!!) 

Тест:

Код

<html>

<head>
<script>

function loadJs() {

var newContent = '<input type=\"hidden\" name=\"fdsa\" value=\"1\"/><script defer id=\"onLoadScript\">alert(\'hi!\');</' + 'script><div> new content! </div>';

var dv = document.getElementById("topTab");

dv.innerHTML = newContent;

}

</script>
</head>

<body>

<div id="topTab">
Beginning
</div>
<input type="button" value="load up" onclick="loadJs()"/>

</body>
</html>



Автор: smartov 25.10.2007, 14:43
Цитата(TrivialCore @  25.10.2007,  13:09 Найти цитируемый пост)
DOM мне все же не катит

интересно было бы знать почему.

Цитата(TrivialCore @  25.10.2007,  13:09 Найти цитируемый пост)
добавить в тег script атрибут DEFER (!!), а вставляемую строку начать с "in-scope" элемента

Ужас. То есть просто вставить скрипт, без другого контента - фигушки...
viva la IE

Автор: dstorm81 25.10.2007, 15:27
мда все у них через жо
но ты тоже усложнил себе жизнь
Код

var newContent = '<input type="hidden" /><script defer id="onLoadScript">alert("hi!")<\/script>';


так проще и с конкатенцией через + мудрить не надо

хотя советую через DOM начать
философия очень правильная


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)