Metin alanında yeni satır


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>

Her ikisini de denedim ama html dosyası oluşturulurken yeni satır yansıtıyor değil. Bunu nasıl yapabilirim?

Yanıtlar:


524

Bunu dene:

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

&#10;Satır Besleme ve &#13;Satır Başı wikipedia HTML varlıklarıdır . Bu şekilde yeni satırı ("\ n") metin olarak görüntülemek yerine ayrıştırırsınız.


2
@LittleAlien jsfiddle.net/v0y3xvpx/1 - OP soruya dayalı cevap, belli ki sorun çözüldü
Bakudan

2
sadece &#10;ayrıştırmak için yeterli değil \nmi?
Doug

Hem satır besleme hem de satır başı karakterlerine gerek olup olmadığına, hatta sağa ayrıştırılmasına Windows veya macOS'a bağlı değil mi?
SeizeTheDay

1
@SeizeTheDay evet, ama MacOS değil - Linux / BSD vs Windows
Bakü

@Bakudan Oh! Unix tabanlı macOS'un hala bu sorunu yaşayacağını düşündüm. Ama kesinlikle doğru, fark daha genel.
SeizeTheDay

28

String.fromCharCode(13, 10)Görüntüleme motorlarını kullanırken faydalı buldum . https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

Bu, içinde gerçek satırsonu karakterleri olan bir dize oluşturur ve bu nedenle görünüm motorunu kaçan bir sürümden ziyade satırsonu çıkarmaya zorlar. Örn: NodeJS EJS görüntüleme motorunu kullanma - Bu, herhangi bir \ n'nin değiştirilmesi gereken basit bir örnektir:

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>

çizer

<textarea>Blah
blah
blah</textarea>

hepsini değiştir:

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
Newline = String.fromCharCode (13, 10); çalışma zamanında programlı olarak yeni satır eklememde işe yarayan tek şeydi. +1.
Ronen Rabinovici

3
Belki de tüm değiştirmek için daha basit bir yol önermek istiyorum: var regExp = new RegExp (find, "gi"); str = str.replace (Normal İfade, yerine);
Ronen Rabinovici

2
Yaptım s = s.replace(/\\n/g, String.fromCharCode(13, 10) ). Yine de bu sihir. Teşekkür ederim.
Gliserin

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

This is my statement2</textarea>

Çalıştığını gösteren keman: http://jsfiddle.net/trott/5vu28/ .

Bunun kaynak dosyada tek bir satırda olmasını istiyorsanız, @Bakudan'ın yanıtında gösterildiği gibi bir satır beslemesi ve satır başı için HTML karakter referanslarını ekleyebilirsiniz:

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


22

Bence farklı dillerin sözdizimini karıştırıyorsunuz.

  • &#10;HTML dizesindeki satır besleme karakter değişmezidir (ASCII 10'un HtmlEncoded değeri veya) . Ama satır besleme karakteri yok DEĞİL HTML bir satır sonu (altta notlara bakın) olarak işlemek.

  • \nJavascript dizesindeki satır besleme karakter değişmezidir (ASCII 10) .

  • <br/>HTML'de satır sonudur. Diğer birçok öğe, örneğin <p>, <div>vb. Bazı stillerle geçersiz kılınmadıkça satır kesmeleri de oluşturur.

Umarım aşağıdaki resim daha net hale getirecektir:

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 hakkında dikkat edilmesi gereken birkaç nokta:

  • innerHTMLDeğeri TEXTAREAelemanı Html hale gelmez. Aşağıdakileri deneyin: <textarea>A <a href='x'>link</a>.</textarea>görmek için.
  • PElemanı, bir boşluk olarak (yeni hatları dahil olmak üzere) bitişik, boşluk oluşturur.
  • LF karakteri HTML'de yeni bir satır veya satır sonu oluşturmaz.
  • TEXTAREAMetin alanı kutusunun içine yeni bir satır olarak LF vermektedir.

1
Yüzünde bu yazı karmaşık görünüyor, ancak aslında bir sürü yararlı bilgi içeriyor. Programınıza progamatik olarak satır ekliyorsanız <textarea/>, ihtiyacınız olan yayın budur!
Morvael

<br/>aradığım şey
Johnny Five


7

bunu deneyin .. işe yarıyor:

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


etiketler için değiştirilmesi :

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

3
aslında $ ("textarea # test"). val (). replace (/ \ n / g, "& # 10;"); (bu, yeni satırın tüm tekrarlarının yerini alacak)
Claudiu

7

Metin alanının içine yeni bir satır eklemek için buraya gerçek bir satır sonu koyun:

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


5

Bunun \nyerine kullanmak isteyebilirsiniz /n.


5
Bir değişmez \nde işe yaramaz, gerçek bir satırsonu olması gerekir .
Greg Hewgill

Evet tabi ki. Ama bunu zaten bildiğini varsayıyorum (yanlış?).
Zar

2

Çok sayıda testten sonra, aşağıdaki kod benim için çalışıyor

 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

Benim .replace()diğer cevaplara açıklanan kalıplarını kullanarak fonksiyon çalışması yoktu. Benim durumum için çalışan desen:

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'nin Konumu:" + t.value.indexOf ("\ n");

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

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

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

Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
Alex Riabov

-5

sadece <br>
ex kullanın :

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

sonuç:
blablablabla
kakakakakak
fafafafafaf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.