Новая строка в текстовой области

<textarea cols='60' rows='8'>This is my statement one.\n This is my statement2</textarea>

<textarea cols='60' rows='8'>This is my statement one.<br/> This is my statement2</textarea>

Я пробовал оба, но новая строка не отражается при рендеринге HTML-файла. Как я могу это сделать?

16 ответов

Решение

Попробуй это:

    <textarea cols='60' rows='8'>This is my statement one.&#13;&#10;This is my statement2</textarea>

&#10; Перевод строки и &#13; Возврат каретки - это HTML-объекты Википедии. Таким образом, вы на самом деле разбираете новую строку ("\n"), а не отображаете ее как текст.

Разрыв введите строку ключевого слова в Textarea с помощью CSS:

white-space: pre-wrap;

Я думаю, что вы путаете синтаксис разных языков.

  • &#10; является (значение HtmlEncoded ASCII 10 или) литералом перевода строки в строке HTML. Но символ перевода строки НЕ отображается как разрыв строки в HTML (см. Примечания внизу).

  • \n символьный литерал перевода строки (ASCII 10) в строке Javascript.

  • <br/> это разрыв строки в HTML. Многие другие элементы, например <p>, <div> и т. д. также отображают разрывы строк, если они не переопределены некоторыми стилями

Надеемся, что следующая иллюстрация прояснит ситуацию:

T.innerText = "Position of LF: " + t.value.indexOf("\n");

p1.innerHTML = t.value;
p2.innerHTML = t.value.replace("\n", "<br/>");
p3.innerText = t.value.replace("\n", "<br/>");
<textarea id="t">Line 1&#10;Line 2</textarea>

<p id='T'></p>
<p id='p1'></p>
<p id='p2'></p>
<p id='p3'></p>

Несколько замечаний по HTML:

  • innderHTML значение TEXTAREA элемент не отображает HTML. Попробуйте следующее: <textarea>A <a href='x'>link</a>.</textarea> видеть.
  • P Элемент отображает все непрерывные пробелы (включая новые строки) как один пробел.
  • Символ LF не отображает новую строку или разрыв строки в HTML.
  • TEXTAREA визуализирует LF как новую строку внутри поля текстовой области.

Я обнаружил String.fromCharCode(13, 10) полезно при использовании движков просмотра. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

Это создает строку с фактическими символами новой строки в ней и заставляет механизм представления выводить новую строку, а не экранированную версию. Например: Использование NodeJS EJS view engine - это простой пример, в котором любой \n должен быть заменен:

viewHelper.js

exports.replaceNewline = function(input) {
    var newline = String.fromCharCode(13, 10);
    return input.replaceAll('\\n', newline);
}

EJS

<textarea><%- viewHelper.replaceNewline("Blah\nblah\nblah") %></textarea>

Оказывает

<textarea>Blah
blah
blah</textarea>

заменить все:

String.prototype.replaceAll = function (find, replace) {
    var result = this;
    do {
        var split = result.split(find);
        result = split.join(replace);
    } while (split.length > 1);
    return result;
};
<textarea cols='60' rows='8'>This is my statement one.

This is my statement2</textarea>

Скрипка, показывающая, что это работает: http://jsfiddle.net/trott/5vu28/.

Если вы действительно хотите, чтобы это было в одной строке исходного файла, вы можете вставить ссылки на символы HTML для перевода строки и возврата каретки, как показано в ответе @Bakudan:

  <textarea cols='60' rows='8'>This is my statement one.&#13;&#10;This is my statement2</textarea>

Попробуйте это.. это работает:

<textarea id="test" cols='60' rows='8'>This is my statement one.&#10;This is my statement2</textarea>

замена для
теги:

$("textarea#test").val(replace($("textarea#test").val(), "<br>", "&#10;")));

Чтобы получить новую строку внутри текстовой области, поместите фактический разрыв строки:

    <textarea cols='60' rows='8'>This is my statement one.
    This is my statement2</textarea>

Вы также должны проверить css свойство (mdn docs) вашего элемента, убедитесь, что для него установлено значение, которое не подавляет разрывы строк, например:

      white-space: pre-line;

Вам будут интересны эти 3 значения:

pre
Последовательности пробелов сохраняются. Строки разрываются только в символах новой строки в исходном тексте и в элементах <br>.

pre-wrap
Последовательности пробелов сохраняются. Строки разбиваются на символы новой строки, на <br> и по мере необходимости для заполнения полей строк.

pre-line
Последовательности пробелов свернуты. Строки разбиваются на символы новой строки, на <br> и по мере необходимости для заполнения полей строк.

Вы можете использовать \n вместо /n,

После многих тестов следующий код работает для меня в Typescreipt

 export function ReplaceNewline(input: string) {
    var newline = String.fromCharCode(13, 10);
    return ReplaceAll(input, "<br>", newline.toString());
}
export function ReplaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

Если вы используете реакцию

Внутри функции

      const handleChange=(e)=>{
const name = e.target.name;
let value = e.target.value;
value = value.split('\n').map(str => <span>{str}<br/></span>);
SetFileds({ ...fileds, [name]: value });
}

Простое и естественное решение, не использующее стили CSS или числовые ссылки на символы, такие как &#13;&#10;было бы использовать &NewLine;ссылка на сущность персонажа:

      The cardinal directions are:&NewLine;- North&NewLine;- East&NewLine;- South&NewLine;- West

Примечание . Так как это определяется просто как LF (перевод строки или U+000Aкодовая точка Unicode), нет уверенности на 100%, подходит ли он для ситуаций, когда требуется вся последовательность CR + LF (возврат каретки + перевод строки). Но тогда он работал в моих тестах Chrome, Edge и WebView2, проведенных в Windows 10, поэтому его можно использовать.

Если вы говорите об использовании значения текстовой области где-то еще на вашей странице и рендеринге новых строк, я обнаружил пробел в css: pre-wrap; работать очень хорошо, и это простое решение. Может быть, это кому-то помогает.

T.innerText = "Положение LF: " + t.value.indexOf("\n");

p3.innerText = t.value.replace("\n", "");

<textarea id="t">Line 1&#10;Line 2</textarea>

<p id='p3'></p>

Мой .replace()Функция с использованием шаблонов, описанных в других ответах, не сработала. Шаблон, который работал для моего случая:

var str = "Test\n\n\Test\n\Test";
str.replace(/\r\n|\r|\n/g,'&#13;&#10;');

// str: "Test&#13;&#10;&#13;&#10;Test&#13;&#10;Test"

Просто используйте <br>
например:

<textarea>
blablablabla <br> kakakakakak <br> fafafafafaf 
</textarea>

результат:
blablablabla
kakakakakak
fafafafafaf

Другие вопросы по тегам