Як додати розриви рядків до текстової області HTML?


156

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

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


Демонструйте демонстрацію Codepen з регулярними виразками та <pre></pre>рішеннями: codepen.io/a-guerrero/pen/grgVBo
a.guerrero.g87

Відповіді:


265

Проблема випливає з того, що розриви рядків ( \n\r?) Не збігаються з <br/>тегами HTML

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';
}

Я вирішив зробити це редагуванням, а не як нове запитання, оскільки це занадто популярна відповідь, щоб бути помилковою чи неповною.


7
Це працює і для мене. У jQuery ви можете зробити щось подібне: $ ('# caption'). Html ($ ('# caption'). Text (). ;
DavGarcia

2
/(\r\n|\n|\r)/gm Перерив
tothemario

3
Правий регулярний вираз /\r\n?|\n/gбез захоплення, без багаторядкових.
aMarCruz

5
Підозрюваний <br>- неправильний. Для універсального розриву лінії в текстовій області, яку ви хочете \r\n. Наприклад, браузер UC ігнорує текстові позначки в режимі «> і \ n». Див. Розділ Додавання рядка рядка в текстовій області HTML .
Боб Штейн

2
Використання внутрішньої частини текстової області не працює. Принаймні, не в Chrome, де я тестував. Однак використання \ n, здається, працює. Використовуйте <br>, якщо ви маєте намір вставити текст як чистий HTML, тобто поза будь-яким вхідним елементом.
Снорварг

24

якщо ви використовуєте загальний сценарій Java і вам потрібно призначити рядок значенню області тексту

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

вам потрібно замінити \nабо < br >на\\\n

інакше він надається Uncaught SyntaxError: Unexpected token ILLEGALу всіх браузерах.


18

Можливо, хтось вважає це корисним:

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

Рішення було подвійним уникненням нових ліній:

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

на стороні сервера, тому що за допомогою єдиних символів втечі JavaScript не розбирався.


використання "\\ n" працює для мене в Windows, і я припускаю, що він буде добре працювати в системах Linux.
Саміх А


6

Якщо ви хочете відобразити текст на власній сторінці, ви можете використовувати <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>


3

Новий рядок - це просто пробіл для браузера, і він не буде розглядатися як звичайний простір (""). Щоб отримати новий рядок, потрібно вставити <BR />елементи.

Ще одна спроба вирішити проблему: Введіть текст у текстову область, а потім додайте трохи JavaScript за кнопкою, щоб перетворити невидимі символи в щось читабельне і скинути результат на а DIV. Це покаже вам, що хоче ваш браузер.


3

У мене є текстовий пояс з ідентифікатором - це #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 />');

Сподіваюся, це допомогло вам. :-)


0

Якщо вам просто потрібно надіслати значення testarea серверу з розривами рядків, використовуйте nl2br


0

ось те, що я зробив за ті ж клопоти, що і у мене.

коли я передаю текст на наступну сторінку в 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.