|
|
|

10.08.2012, 11:19
|
|
Новичок на форуме
|
|
Регистрация: 10.08.2012
Сообщений: 4
|
|
|
Странное поведение innerHTML
Вопрос знатокам на засыпку.
Есть код:
|
Код:
|
<html>
<body>
<div id='printDiv'></div>
<script>
var var0 = 'Test';
// тег <i> работает
printDiv.innerHTML+="<i>"+var0+"</i> ";
// тег <i> не работает
printDiv.innerHTML+="<i>";
printDiv.innerHTML+=var0;
printDiv.innerHTML+="</i>";
</script>
</body>
</html> |
Почему во втором случае тег <i> не работает? Естественно, вместо <i> может быть что угодно.
|
|
|

10.08.2012, 11:28
|
 |
Студент
|
|
Регистрация: 30.04.2012
Сообщений: 1,113
|
|
|
innerHTML работает с DOM а не просто вставляет текст в документ-соответтвенно незаконченные элементы такие как <i> игнорирует
с помощью innerHTML+ не рекомендую вставлять ибо некоторые события при этом у других элементов могут пропасть
|
|
|

10.08.2012, 11:31
|
|
Новичок на форуме
|
|
Регистрация: 10.08.2012
Сообщений: 4
|
|
|
Хорошо, а какой же выход есть в данном случае? У меня текст в printDiv составляется из нескольких независимых частей, каждая из которых не знает о содержании других. Т.е. интересует, как отформатировать текст (в данном случае var0)?
|
|
|

10.08.2012, 11:34
|
 |
Студент
|
|
Регистрация: 30.04.2012
Сообщений: 1,113
|
|
Сообщение от DoubleDragon
|
|
Хорошо, а какой же выход есть в данном случае? У меня текст в printDiv составляется из нескольких независимых частей, каждая из которых не знает о содержании других. Т.е. интересует, как отформатировать текст (в данном случае var0)?
|
а в какую-то переменную нельзя сначала собрать?
|
|
|

10.08.2012, 11:38
|
|
Новичок на форуме
|
|
Регистрация: 10.08.2012
Сообщений: 4
|
|
|
Нет, это парсер независимых частей. Всё работает, а с этой промблемой я уже намучался. Может во что-то оборачивать var0 и через стили устанавливать форматирование? Будет это работать?
|
|
|

10.08.2012, 11:43
|
 |
Студент
|
|
Регистрация: 30.04.2012
Сообщений: 1,113
|
|
Сообщение от DoubleDragon
|
|
Нет, это парсер независимых частей. Всё работает, а с этой промблемой я уже намучался. Может во что-то оборачивать var0 и через стили устанавливать форматирование? Будет это работать?
|
если <span id='a1'>var0</span> то потом через стили можно задать
|
|
|

10.08.2012, 11:45
|
 |
Профессор
|
|
Регистрация: 03.05.2011
Сообщений: 848
|
|
DoubleDragon, а почему бы вам не воспользоваться DOM?
<html>
<body>
<div id='printDiv'></div>
<script>
var var0 = 'Test';
var i = document.createElement("i");
i.appendChild(document.createTextNode(var0));
document.getElementById("printDiv").appendChild(i);
</script>
</body>
</html>
|
|
|

10.08.2012, 12:34
|
|
Новичок на форуме
|
|
Регистрация: 10.08.2012
Сообщений: 4
|
|
|
Да, DOM тоже вариант. Но мой пример сильно упрощённый. Реальность гораздо сложнее.
В любом случае спасибо за идею.
|
|
|

10.08.2012, 13:30
|
 |
Студент
|
|
Регистрация: 30.04.2012
Сообщений: 1,113
|
|
Сообщение от DoubleDragon
|
Да, DOM тоже вариант. Но мой пример сильно упрощённый. Реальность гораздо сложнее.
В любом случае спасибо за идею.
|
Если получится делайте с DOM
|
|
|

10.08.2012, 16:09
|
 |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
|
Сообщение от vadim5june
|
|
innerHTML работает с DOM а не просто вставляет текст в документ-соответтвенно незаконченные элементы такие как <i> игнорирует
|
он их закрывает, поэтому закрывающую часть можно и не прописывать
<div id='printDiv'></div>
<script>
window.onload = function () {
var printDiv = document.getElementById('printDiv');
var var0 = 'Test';
printDiv.innerHTML+="<i>" + var0;
alert(printDiv.innerHTML);
printDiv.innerHTML+="<i>";
alert(printDiv.innerHTML);
printDiv.innerHTML+=var0;
alert(printDiv.innerHTML);
}
</script>
|
|
|
|