[英]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.