innerHTML + textarea, проблеммы в прямыми кавычками под Opera

Krisha

pain in the neck
innerHTML + textarea, проблеммы в прямыми кавычками под Opera

Всем привет!

Проблема: При вставке текста в textarea прямые двойные кавычки заменяются html примитивами.

Пример кода:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 
<script language="JavaScript">
<!--
   function show(id)
   {
     var elem = document.getElementById(id);
     var str = elem.innerHTML;

     document.forms.MyForm.body.value = str;
   }
-->
</script>

</head>

<body>

<form name="MyForm">
 <textarea name="body" cols="45" rows="5">Какой-то текст с "кавычками"</textarea>
</form>

<div id="p14">А вот тоже текст с "кавычками"</div><br>

<a href="" onClick="show('p14'); return false;">Нажмите тут!</a>

</body>
</html>
Тестирую в Opera 8.51 Build 7712 (Win32)

Какие будут мысли по этому поводу?
 

valyala

Новичок
В свойстве innerHTML хранится HTML-код, а не plain-текст. А в HTML-коде вполне допустимы html-entities. Вот цитата из HTML specification по поводу кавычек и амперсанда (http://www.w3.org/TR/REC-html40/charset.html#h-5.3.2):
Authors should use "&amp;" (ASCII decimal 38) instead of "&" to avoid confusion with the beginning of a character reference (entity reference open delimiter). Authors should also use "&amp;" in attribute values since character references are allowed within CDATA attribute values.

Some authors use the character entity reference "&quot;" to encode instances of the double quote mark (") since that character may be used to delimit attribute values.
 

Krisha

pain in the neck
valyala
Вопрос, собстна, был в том, как это обойти, а не почему это происходит.

как вариант придумалось вот так: var str = elem.firstChild.nodeValue;

Интерессно как еще по-другому можно обойти.
 

valyala

Новичок
можно попробовать что-то в этом роде:
Код:
show = function(id) { document.forms.MyForm.body.innerHTML = document.getElementById(id).innerHTML }
 
Сверху