Care este caracterul de sfârșit de linie pentru șiruri în JavaScript?
Este \n secvența universală de caracter de linie nouă în JavaScript pentru toate platformele? Dacă nu, cum determin caracterul pentru mediul curent?
Nu întreb despre elementul de linie nouă HTML (<BR/>). Întreb despre secvența de caractere de linie nouă folosită în șirurile JavaScript.
Răspuns #1
Tocmai am testat câteva browsere folosind această bucată de JavaScript idiotă:
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>IE8 și Opera 9 pe Windows folosesc \r\n. Toate celelalte browsere pe care le-am testat (Safari 4 și Firefox 3.5 pe Windows, și Firefox 3.0 pe Linux) folosesc \n. Toate pot gestiona \n foarte bine atunci când se setează valoarea, deși IE și Opera vor converti înapoi la \r\n intern. Există un articol pe SitePoint cu mai multe detalii numit Line endings in Javascript.
Rețineți, de asemenea, că acest lucru este independent de sfârșiturile reale de linie din fișierul HTML în sine (atât \n, cât și \r\n dau aceleași rezultate).
Când se trimite un formular, toate browserele canonizează salturile de linie la %0D%0A în codificarea URL. Pentru a vedea asta, încărcați de exemplu data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> și apăsați butonul de trimitere. (Unele browsere blochează încărcarea paginii trimise, dar puteți vedea valorile formularului codificate în URL în consolă.)
Totuși, nu cred că trebuie să faci prea multe determinări. Dacă vrei doar să împarți textul după linii noi, ai putea face ceva de genul acesta:
lines = foo.value.split(/\r\n|\r|\n/g);
Răspunsul #2
Da, este universal.
Deși '\n' este caracterul universal de linie nouă, trebuie să ții cont că, în funcție de intrarea ta, caracterele de linie nouă pot fi precedate de caractere de întoarcere la începutul liniei ('\r').
Răspunsul #3
Ar putea fi mai ușor să gestionezi toate cazurile caracterului de linie nouă în loc să verifici fiecare caz și apoi să îl aplici. De exemplu, dacă trebuie să înlocuiești linia nouă, atunci fă următoarele:
htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
Răspunsul #4
Da, folosește \n, cu excepția cazului în care generezi cod HTML, caz în care vrei să folosești <br />.
Răspunsul #5
Cu ES6, poți folosi ghilimelele backtick (``), care se află sub butonul Esc pe orice tastatură cu layout US de dimensiune 75% sau mai mare. Deci poți scrie ceva de genul acesta:
var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
Răspuns #6
Într-o funcție de link pentru email, folosesc "%0D%0A":
function sendMail() {
var bodydata="Before "+ "%0D%0A";
bodydata+="After"
var MailMSG = "mailto:[email "
+ "[email "
+ "&subject=subject"
+ "&body=" + bodydata;
window.location.href = MailMSG;
}
HTML
<a href="#" onClick="sendMail()">Contact Us</a>
