Как добавить разрывы строк в текстовое поле HTML?

Я редактирую <textarea> с помощью JavaScript. Проблема в том, что когда я делаю в нем разрывы строк, они не отображаются. Как я могу это сделать?

Я получаю значение для написания функции, но при этом не будет разрывов строк.


person djairo    schedule 14.05.2009    source источник
comment
Здесь представлена ​​демонстрация Codepen с регулярным выражением и <pre></pre> решениями: codepen.io/a-guerrero/pen/grgVBo < / а>   -  person a.guerrero.g87    schedule 28.08.2018


Ответы (9)


Проблема возникает из-за того, что разрывы строк (\n\r?) Не совпадают с тегами HTML <br/>.

var text = document.forms[0].txt.value;
text = text.replace(/\r?\n/g, '<br />');

ОБНОВЛЕНИЕ

Поскольку многие комментарии и мой собственный опыт показали мне, что это <br> решение не работает должным образом, вот пример того, как добавить новую строку в textarea с помощью '\ r \ n'

function log(text) {
    var txtArea ;

    txtArea = document.getElementById("txtDebug") ;
    txtArea.value +=  text + '\r\n';
}

Я решил сделать это отредактированием, а не как новый вопрос, потому что это слишком популярный ответ, чтобы быть неправильным или неполным.

person TStamper    schedule 14.05.2009
comment
У меня это тоже работает. В jQuery вы можете сделать что-то вроде этого: $ ('# caption'). Html ($ ('# caption'). Text (). Replace (/ \ n \ r? / G, '‹br /›')) ; - person DavGarcia; 25.11.2009
comment
Разрыв строки Regexp должен быть /(\r\n|\n|\r)/gm textfixer.com/tutorials/javascript-line-breaks .php - person tothemario; 12.09.2012
comment
Если вы используете jQuery, я предлагаю использовать .val - stackoverflow.com/questions/5583040/ - person Justin Ethier; 25.04.2013
comment
Правильное регулярное выражение /\r\n?|\n/g без захвата, без многострочного. - person aMarCruz; 13.12.2015
comment
Подозреваемый <br> ошибается. Для универсального разрыва строки в текстовой области вам нужно \r\n. Например, UC Browser игнорирует ‹br› и \ n в текстовых областях. См. Раздел Добавление разрыва строки в текстовую область HTML. - person Bob Stein; 19.07.2016
comment
Использование ‹br› внутри текстового поля не работает. По крайней мере, не в Chrome, где я тестировал. Хотя использование \ n, похоже, работает. Используйте ‹br›, если вы собираетесь вставить текст как чистый html, то есть вне любого элемента ввода. - person Snorvarg; 31.10.2017
comment
.value = ваш новый текст с \ r \ n не будет работать внутри тега TEXTAREA, необходимо использовать .innerHTML = ваш новый текст с \ r \ n - person Boris Gafurov; 14.02.2020

если вы используете общий java-скрипт и вам нужно присвоить строку значению текстовой области, тогда

 document.getElementById("textareaid").value='texthere\\\ntexttext'.

вам нужно заменить \n или < br > на \\\n

в противном случае он дает Uncaught SyntaxError: Unexpected token ILLEGAL во всех браузерах.

person jit    schedule 19.01.2012

Может быть, кому-то это пригодится:

У меня была проблема с разрывами строк, которые передавались из переменной сервера в переменную javascript, а затем javascript записывал их в текстовое поле (используя привязки значений knockout.js).

решение заключалось в двойном экранировании новых строк:

orginal.Replace("\r\n", "\\r\\n")

на стороне сервера, потому что с помощью только одного escape-символа javascript не анализировался.

person 0lukasz0    schedule 31.05.2013
comment
использование \\ n работает для меня в Windows, и я предполагаю, что он будет работать нормально в системах Linux. - person Samih A; 07.12.2014

Вам нужно использовать \n для linebreaks внутри textarea

person strubester    schedule 14.05.2009
comment
Работает в Firefox v71. Спасибо! - person Eric Sondergard; 09.12.2019

Если вы хотите отображать текст внутри своей страницы, вы можете использовать тег <pre>.

document.querySelector('textarea').addEventListener('keyup', function() {
  document.querySelector('pre').innerText = this.value;
});
<textarea placeholder="type text here"></textarea>
<pre style="font-family: inherits">
The
new lines will
be respected
      and spaces too
</pre>

person Cristian Traìna    schedule 10.06.2018

У меня есть текстовое поле с идентификатором #infoartist:

<textarea id="infoartist" ng-show="dForm" style="width: 100%;" placeholder="Tell your contacts and collectors about yourself."></textarea>

В коде javascript я получу значение textarea и заменю экранирование новой строки (\ n \ r) тегом <br />, например:

var text = document.getElementById("infoartist").value;
text = text.replace(/\r?\n/g, '<br />');

Итак, если вы используете jquery (например, я):

var text = $("#infoartist").val();
text = text.replace(/\r?\n/g, '<br />');

Надеюсь, это вам помогло. :-)

person NgaNguyenDuy    schedule 30.03.2015

Новая строка - это просто пробел для браузера и не будет обрабатываться иначе, чем обычный пробел (""). Чтобы получить новую строку, вы должны вставить <BR /> элементов.

Еще одна попытка решить проблему: введите текст в текстовое поле, а затем добавьте JavaScript за кнопкой, чтобы преобразовать невидимые символы во что-то читаемое и вывести результат в DIV. Это скажет вам, чего хочет ваш браузер.

person Aaron Digulla    schedule 14.05.2009

Если вам просто нужно отправить значение testarea на сервер с разрывами строк, используйте nl2br

person Igor L.    schedule 05.03.2013

вот что я сделал с той же проблемой, что и я.

когда я передаю текст на следующую страницу в jsp, я читаю его как текстовое поле вместо того, чтобы читать что-то вроде

так что результат получился таким, каким вы хотели. а для других свойств вы можете использовать, как показано ниже.

<textarea style="background-color: white; border: none; width:660px;font-family: Arial, Helvetica, sans-serif; font-size:1.0em; resize:none;" name="text" cols="75" rows="15" readonly="readonly" ><s:property value="%{text}"/></textarea>
person raja777m    schedule 23.10.2014