Text preformatat în Javascript cu pauze de linie încrucișată în browser

Am preformatat siruri de caractere cu linii-break si multi-spaces si vreau sa le adaug intr-un nod de text.


<script>
   var string = "Preformatted"
                + "\n" //\r, \r\n, \n\r or what else?
                + "multispace     string";
   var text = document.createTextNode(string);
   document.getElementById('bar').appendChild(text);
</script>

Am încercat să adoptăm ca întrerupător de linie:

  • \n breaks lines in all browsers, but in IE (I'm testing on 7) becomes a space
  • \r breaks lines only in IE
  • \r\n works in all browser but in IE the space at beginning of second line is horror
  • \n\r also ok in all, but in IE the space at the end of first line is inacceptable for my layout.

I can't use
and innerHTML because IE collapses multi-spaces.
jQuery .text(string) has exactly the same behavior of .appendChild(createTextNode(string))

Cum pot introduce pauze de linie între browser-uri? În cele din urmă, cum pot detecta cu ușurință dacă un browser acceptă \ n sau \ r ?

0
adăugat autor Šime Vidas, sursa
@MilkyWayJoe: Pot să folosesc jQuery dacă nu există soluții javascript.
adăugat autor Salvador, sursa
Nu pari să folosiți jQuery și nici nu sunt sigur dacă aceasta este ceea ce căutați, dar ați putea folosi dacă ($ .browser.msie) {/ * se ocupă de \ n aici * /} și restul în mod normal, dar va trebui să utilizați jQuery sau să mergeți la sursa jQuery și să implementați $. browser.msie și să aplicați același control și să îl gestionați diferit de alte browsere.
adăugat autor MilkyWayJoe, sursa

3 răspunsuri

In the meanwhile I found an easier solution that seems to be cross-browser:
innerHTML with a brute

 imposition

<div id="bar"></div>

<script>
  var string = "Preformatted \n"
             + "string \r"
             + "with \r\n"
             + "assorted \n\r"
             + "line   breaks";
  document.getElementById('bar').innerHTML = "

\r\n becomes a single return
\n\r double return
Imperfecțiunea: Modul de compatibilitate IE 10 adaugă un spațiu la sfârșitul liniei finale.
"+string+"
";
</script>
0
adăugat
A mers. Mulțumiri!
adăugat autor Karl Pokus, sursa

Deoarece IE pare a fi unul ciudat, ar putea să stocați caracterele într-o variabilă și să utilizați condițional comentarii pentru ao modifica după cum este necesar:

<script> var $LF = '\n'; </script>
<!--[if lt IE 8]>
    <script> $LF = '\r'; </script>
0
adăugat
Vă mulțumim pentru testul IE. Dar cred că punctul nu este de a detecta dacă IE sau nu, dar dacă browserul (indiferent care este) este corect afișat \ r sau \ n .
adăugat autor Salvador, sursa

Acest lucru părea să funcționeze în toate browserele pe care le-am testat (safari, opera, crom, firefox, ie7, ie8, ie9):

http://jsfiddle.net/4bQ5Q/1/

Cod:

var textarea = document.createElement("textarea");
textarea.value = "\n";
var eol = textarea.value.replace(/\r\n/, "\r");

var string = "Preformatted" + eol + "multispace     string";

var text = document.createTextNode(string);
document.getElementById('bar').appendChild(text);​
0
adăugat
Aș redenumi această variabilă la EOL , o fac global și folosesc un IIFE pentru a-și calcula valoarea: jsfiddle.net/XsLME
adăugat autor Šime Vidas, sursa
Sunt bine cu comentariul meu :)
adăugat autor Šime Vidas, sursa
Această soluție este exact ceea ce am visat. Mulțumesc Esailija și Šime!
adăugat autor Salvador, sursa
@ ŠimeVidas nu ezitați să editați :]
adăugat autor Esailija, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com