3462 Stimmen

Mehrzeilige Zeichenketten in JavaScript erstellen

Ich habe den folgenden Code in Ruby. Ich möchte diesen Code in JavaScript umwandeln. Was ist der entsprechende Code in JS?

text = <<"HERE"
This
Is
A
Multiline
String
HERE

186voto

Luke Punkte 1914

Ich kam mit dieser sehr jimmy rigged Methode eines mehrzeiligen String. Da bei der Umwandlung einer Funktion in eine Zeichenkette auch alle Kommentare innerhalb der Funktion zurückgegeben werden, können Sie die Kommentare als Zeichenkette mit einem mehrzeiligen Kommentar /**/ verwenden. Man muss nur die Enden abschneiden und schon hat man seine Zeichenkette.

var myString = function(){/*
    This is some
    awesome multi-lined
    string using a comment 
    inside a function 
    returned as a string.
    Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)

alert(myString)

50 Stimmen

Das ist absolut erschreckend. Ich liebe es (obwohl Sie vielleicht eine Regex-Übereinstimmung machen müssen, weil ich nicht sicher bin, wie genau die Leerzeichen für toString() ist.

2 Stimmen

Diese Lösung scheint in Firefox nicht zu funktionieren, vielleicht ist es eine Sicherheitsfunktion des Browsers? EDIT: Vergessen Sie es, es funktioniert nur nicht für Firefox Version 16.

59 Stimmen

Hüten Sie sich auch vor Minifizierern, die Kommentare entfernen... :D

94voto

Peter V. Mørch Punkte 11308

Ich bin überrascht, dass ich das nicht gesehen habe, denn es funktioniert überall, wo ich es getestet habe, und ist z. B. für Vorlagen sehr nützlich:

<script type="bogus" id="multi">
    My
    multiline
    string
</script>
<script>
    alert($('#multi').html());
</script>

Kennt jemand eine Umgebung, in der HTML vorhanden ist, aber nicht funktioniert?

25 Stimmen

Überall dort, wo Sie Ihre Zeichenketten nicht in separaten und weit entfernten Skriptelementen unterbringen wollen.

10 Stimmen

Ein berechtigter Einwand! Er ist nicht perfekt. Aber für Vorlagen ist diese Trennung nicht nur in Ordnung, sondern vielleicht sogar erwünscht.

2 Stimmen

Ich ziehe es vor, alles, was über 80/120 Zeichen hinausgeht, in mehrzeilige Texte aufzuteilen, ich fürchte, das ist mehr als nur eine Vorlage. Ich bevorzuge jetzt die Syntax 'Zeile1' + 'Zeile2'. Sie ist auch am schnellsten (obwohl sie bei wirklich großen Texten durchaus konkurrenzfähig ist). Aber es ist ein netter Trick.

60voto

Tom Beech Punkte 2131

Ich löste dies durch die Ausgabe eines div, so dass es versteckt, und rufen Sie die div id von jQuery, wenn ich es brauchte.

z.B..

<div id="UniqueID" style="display:none;">
     Strings
     On
     Multiple
     Lines
     Here
</div>

Dann, wenn ich brauche, um die Zeichenfolge zu erhalten, verwende ich einfach die folgende jQuery:

$('#UniqueID').html();

Das gibt meinen Text in mehreren Zeilen wieder. Wenn ich aufrufe

alert($('#UniqueID').html());

Ich verstehe:

enter image description here

4 Stimmen

Vielen Dank dafür! Es ist die einzige Antwort, die ich gefunden habe, die mein Problem löst, die unbekannte Zeichenfolgen beinhaltet, die eine beliebige Kombination von einfachen und doppelten Anführungszeichen enthalten können, die direkt in den Code eingefügt werden, ohne die Möglichkeit der Vorcodierung. (es kommt aus einer Templating-Sprache, die die JS erstellt - immer noch aus einer vertrauenswürdigen Quelle und nicht eine Formularübermittlung, so dass es nicht TOTAL dement ist).

0 Stimmen

Dies war die einzige Methode, die tatsächlich für mich gearbeitet, um eine mehrzeilige Javascript-String-Variable aus einem Java-String zu erstellen.

0 Stimmen

Dies bekommt die Arbeit für mich getan, obwohl es nicht lösen mehrzeilige String-Werte Zuordnung zu Javascript-Variablen

34voto

Es gibt mehrere Möglichkeiten, dies zu erreichen

1. Schrägstrich-Verkettung

  var MultiLine=  '1\
    2\
    3\
    4\
    5\
    6\
    7\
    8\
    9';

2. reguläre Verkettung

var MultiLine = '1'
+'2'
+'3'
+'4'
+'5';

3. Array Join-Verkettung

var MultiLine = [
'1',
'2',
'3',
'4',
'5'
].join('');

Leistungstechnisch, Schrägstrich-Verkettung (die erste) ist die schnellste.

Siehe dieser Testfall für weitere Informationen über die Leistung

Aktualisierung:

Mit dem ES2015 können wir die Vorteile der Funktion Vorlagenzeichenfolgen nutzen. Damit müssen wir nur Back-Ticks verwenden, um mehrzeilige Zeichenketten zu erstellen

Ejemplo:

 `<h1>{{title}}</h1>
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div><label>name: </label>{{hero.name}}</div>
  `

11 Stimmen

Ich glaube, Sie haben einfach nur wiedergekäut, was schon seit fünf Jahren auf der Seite steht, aber auf eine sauberere Art und Weise.

0 Stimmen

Schließt die Schrägstrichverkettung nicht auch die Leerzeichen am Zeilenanfang ein?

33voto

jpfreire Punkte 1248

Skript-Tags verwenden:

  • einfügen <script>...</script> Block mit Ihrem mehrzeiligen Text in head Tag;
  • Ihren mehrzeiligen Text so erhalten, wie er ist... (achten Sie auf die Textkodierung: UTF-8, ASCII)

    <script>
    
        // pure javascript
        var text = document.getElementById("mySoapMessage").innerHTML ;
    
        // using JQuery's document ready for safety
        $(document).ready(function() {
    
            var text = $("#mySoapMessage").html(); 
    
        });
    
    </script>
    
    <script id="mySoapMessage" type="text/plain">
    
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="...">
           <soapenv:Header/>
           <soapenv:Body>
              <typ:getConvocadosElement>
                 ...
              </typ:getConvocadosElement>
           </soapenv:Body>
        </soapenv:Envelope>
    
        <!-- this comment will be present on your string -->
        //uh-oh, javascript comments...  SOAP request will fail 
    
    </script>

0 Stimmen

Ich denke, diese Strategie ist sauber und wird viel zu wenig genutzt. jsrender verwendet sie.

0 Stimmen

Ich bin mit dieser mit innerText iso innerHTML, aber wie stelle ich sicher, dass die Leerzeichen erhalten bleiben?

0 Stimmen

Auch Ajax-Abfragen, falls Sie diese verwenden. Sie können versuchen, Ihre Kopfzeilen zu ändern xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); Ich kann mich nicht erinnern, dass ich andere Probleme als Tippfehler bei Kommentaren in JS hatte. Leerzeichen waren kein Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X