簡體   English   中英

JavaScript字符串換行符?

[英]JavaScript string newline character?

\\n是否適用於所有平台的Java語言中的通用換行符序列? 如果不是,我如何確定當前環境的角色?

我不是在問HTML換行符( <BR/> )。 我問的是JavaScript字符串中使用的換行符序列。

我剛剛使用了一些愚蠢的JavaScript測試了一些瀏覽器:

 function log_newline(msg, test_value) { if (!test_value) { test_value = document.getElementById('test').value; } console.log(msg + ': ' + (test_value.match(/\\r/) ? 'CR' : '') + ' ' + (test_value.match(/\\n/) ? 'LF' : '')); } log_newline('HTML source'); log_newline('JS string', "foo\\nbar"); log_newline('JS template literal', `bar baz`); 
 <textarea id="test" name="test"> </textarea> 

Windows上的IE8和Opera 9使用\\r\\n 我測試過的所有其他瀏覽器(Windows上的Safari 4和Firefox 3.5,Linux上的Firefox 3.0)都使用\\n 設置值時,它們都可以很好地處理\\n ,盡管IE和Opera會在內部再次將其轉換回\\r\\n 有SitePoint文章,其中有更多詳細信息,稱為Java中的行尾

還要注意,這與HTML文件本身中的實際行尾無關( \\n\\r\\n給出相同的結果)。

提交表單時,所有瀏覽器都將URL編碼中的換行符規范化為%0D%0A 為此,請加載例如data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>並按提交按鈕。 (某些瀏覽器阻止了已提交頁面的加載,但是您可以在控制台中看到URL編碼的表單值。)

不過,我認為您真的不需要做任何決定。 如果只想在換行符上分割文本,則可以執行以下操作:

lines = foo.value.split(/\r\n|\r|\n/g);

是的,它是通用的。

盡管'\\n'是通用換行符 ,但是必須記住,根據您的輸入,換行符可能以回車符( '\\r''\\r'

不要使用“ \\ n”。 嘗試一下:

var string = "this\
is a multi\
line\
string";

只需輸入反斜杠並繼續進行即可! 奇跡般有效。

僅處理換行符的所有情況,而不是先檢查哪種情況然后應用它,可能是最簡單的。 例如,如果您需要替換換行符,請執行以下操作:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

是的,請使用\\ n,除非要生成要在其中使用<br /> html代碼。

電子郵件鏈接功能我使用“%0D%0A”

function sendMail() {   
var bodydata="Before "+ "%0D%0A";
    bodydata+="After"

var MailMSG = "mailto:aaa@sss.com" 
         + "?cc=07@sss.com" 
         + "&subject=subject" 
         + "&body=" + bodydata; 
window.location.href = MailMSG; 
} 

[HTML]

<a href="#" onClick="sendMail()">Contact Us</a>

獲取當前瀏覽器的行分隔符:

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}

注意-使用ExtendScript JavaScript(在Photoshop CS3 +等應用程序中使用的Adobe腳本語言)時,使用的字符為“ \\ r”。 “ \\ n”將被解釋為字體字符,因此許多字體將改為具有塊字符。

例如(要選擇一個名為“ Note”的圖層並在所有期間后添加換行符):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");

您可以在ES6中使用``引號(Esc按鈕下方的引號)。 所以你可以這樣寫:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;

我有用\\ n\\ r \\ n表示換行的問題。
神奇的是,用於回車的字符\\ r像換行符一樣為我工作。
因此,在某些情況下,考慮\\ r也很有用。

我相信是-當您使用JS字符串時。

但是,如果要生成HTML,則必須使用<br />標簽(而不是\\n ,因為您不再使用JS了)

printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

印刷品:

Welcome!
Your balance is currently $1000 and your interest rate is 1%.

實際觀察...在我的NodeJS腳本中,我具有以下功能:

function writeToLogFile (message) {
    fs.appendFile('myserverlog.txt', Date() + " " + message + "\r\n", function (err) {
        if (err) throw err;
    });
}

首先,我只有“ \\ n”,但是我注意到在記事本中打開日志文件時,它在同一行顯示所有條目。 另一方面,Notepad ++在各自的行上顯示條目。 將代碼更改為“ \\ r \\ n”后,即使記事本也會在每行中顯示每個條目。

\\n對於我遇到的所有情況都很好。 如果您使用的是網絡,請使用\\n ,不必擔心(除非您遇到任何與換行有關的問題)。

您可以使用<br/>document.write/document.writeln之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM