Как запретить IE конвертировать текстовые строки в один пробел - PullRequest
1 голос
/ 16 декабря 2011

У меня есть следующий HTML-код, который по сути копирует текстовое поле, включая его текст.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Test Page</title>
        <script type="text/javascript">
            function copyTextarea() {
                var originalTextbox = document.getElementById('originalTextarea');
                var copiedTextboxSpan = document.getElementById('copiedTextareaSpan');

                var text = originalTextbox.value;

                copiedTextboxSpan.innerHTML = '<textarea name="myNewTextarea" rows="5" cols="50"></textarea>';

                var newTextbox = document.getElementsByName('myNewTextarea')[0];
                newTextbox.innerHTML = text;
            }
        </script>
    </head>
    <body>
        Enter your text:
        <br />
        <textarea id="originalTextarea" rows="5" cols="50"></textarea>
        <br />
        <input type="button" value="Copy Textarea" onclick="copyTextarea()" />
        <br />
        Copied text:
        <br />
        <span id="copiedTextareaSpan"></span>
    </body>
</html>

Это очень упрощенная версия HTML, которая у меня есть, поэтому, пожалуйста, не предлагайте больших изменений. Мне нужно создать текстовое поле и установить его текст отдельно и т. Д.

Этот код кажется простым и отлично работает, кроме случаев, когда речь идет о символах перевода строки. По какой-то причине Internet Explorer (IE) всегда преобразует символы новой строки в один пробел. Тем не менее, на моем сервере Tomcat это происходило не локально, а подкрадывалось, когда я развертывался на тестовом сервере. Но на тестовом сервере он отлично работает в Chrome, Firefox и т. Д.

Кто-нибудь знает, что может происходить? Я не слишком много знаю о JavaScript, но я думаю, что браузер выполняет код. Но если это так, то почему у IE нет локальных проблем, но есть проблема на тестовом сервере?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Попробуйте создать реальные объекты DOM:

newTextarea = document.createElement('textarea');
newTextarea.setAttribute('name', 'myNewTextarea');
newTextarea.setAttribute('rows', '5');
newTextarea.setAttribute('cols', '50');

copiedTextboxSpan.appendChild(newTextarea);

var newTextbox = document.getElementsByName('myNewTextarea')[0];
newTextbox.value = text;

Кроме того, используйте value вместо innerHTML при работе с текстовой областью.

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

Если вы можете жить с JQuery:

$('#copiedTextareaSpan').replaceWith(function () {
    var text = $('#originalTextarea').val();
    return '<textarea name="myNewTextarea" rows="5" cols="50">' + text + '</textarea>';
});

копирует текст из originalTextarea в copiedTextArea (после его создания).

...