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


281
<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-файлу. Як я можу це зробити?

Відповіді:


524

Спробуйте це:

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

&#10;Потік рядків та &#13;повернення перевезення - це вікіпедія HTML . Таким чином ви насправді розбираєте новий рядок ("\ n"), а не показуєте його як текст.


2
@LittleAlien jsfiddle.net/v0y3xvpx/1 - відповідь на основі питання щодо ОП, очевидно, проблема була вирішена
Bakudan

2
не &#10;достатньо просто розібратися \n?
Дуг

Чи не залежить від Windows проти macOS, чи потрібні символи подачі рядків та повернення каретки чи навіть проаналізовані правильно?
SeizeTheDay

1
@SeizeTheDay так, але це не MacOS - це Linux / BSD проти Windows
Bakudan

@Bakudan О! Я думав, що macOS, заснований на Unix, все ще матиме цю проблему. Але ви точно впевнені, різниця більш загальна.
SeizeTheDay

28

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

Це створює рядок з фактичними символами нового рядка в ньому, і таким чином змушує механізм перегляду виводити новий рядок, а не уникнуту версію. Наприклад: Використання двигуна перегляду EJS NodeJS - Це простий приклад, у якому будь-який \ 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;
};

1
Новий рядок = String.fromCharCode (13, 10); це єдине, що для мене працювало над тим, щоб програмно додавати новий рядок під час виконання програми. +1.
Ронен Рабіновичі,

3
Я хотів би запропонувати, мабуть, простіший спосіб замінити всі: var regExp = new RegExp (find, "gi"); str = str.replace (regExp, замінити);
Ронен Рабіновичі,

2
Я так і зробив s = s.replace(/\\n/g, String.fromCharCode(13, 10) ). Це все-таки магія. Дякую.
Гліцерин

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

This is my statement2</textarea>

Fiddle показує, що це працює: http://jsfiddle.net/trott/5vu28/ .

Якщо ви дійсно хочете, щоб це було в одному рядку у вихідному файлі, ви можете вставити посилання символів HTML для каналу рядка та повернення перевезення, як показано у відповіді від @Bakudan:

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


22

Думаю, ви плутаєте синтаксис різних мов.

  • &#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:

  • innerHTMLЗначення TEXTAREAелемента не робить HTML. Спробуйте наступне:<textarea>A <a href='x'>link</a>.</textarea> щоб побачити.
  • The PЕлемент надає всі суміжні прогалини ( в тому числі нових ліній) , як один простір.
  • Символ LF не відображає новий або перерив рядка в HTML.
  • TEXTAREAРобить LF в якості нової лінії всередині коробки тексту області.

1
З цього боку ця публікація виглядає складною, але насправді містить багато корисної інформації. Якщо ви прогаматично додаєте рядки до свого, <textarea/>це вам потрібна посада!
Morvael

<br/>це те, що я шукав
Johnny Five


7

спробуйте це .. це працює:

<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;")));

3
його власне $ ("textarea # test"). val (). замінити (/ \ n / g, "& # 10;"); (це замінить усі випадки нового рядка)
Клавдіу

7

Щоб отримати новий рядок у текстовій області, поставте там фактичний розрив рядків:

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


5

Ви можете використовувати \nзамість цього /n.


5
Ну, і буквальний \nне буде працювати, це повинно бути фактичним новим рядком.
Грег Хьюгілл

Так, звісно. Але я (неправильно?) Припускаю, що він це вже знав.
Зар

2

Після безлічі тестів наступний код працює для мене в 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);
}

0

Моя .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"

0

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>

Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Олексій Рябов

-5

просто використовуйте <br>
ex:

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

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

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