Ich habe den folgenden Code in Ruby. Ich möchte diesen Code in JavaScript konvertieren. Was ist der entsprechende Code in JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Ich habe den folgenden Code in Ruby. Ich möchte diesen Code in JavaScript konvertieren. Was ist der entsprechende Code in JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Antworten:
Aktualisieren:
ECMAScript 6 (ES6) führt eine neue Art von Literal ein, nämlich Vorlagenliterale . Sie haben viele Merkmale, unter anderem variable Interpolation, aber vor allem für diese Frage können sie mehrzeilig sein.
Ein Vorlagenliteral wird durch Backticks begrenzt :
(Hinweis: Ich befürworte nicht die Verwendung von HTML in Zeichenfolgen.)
Die Browserunterstützung ist in Ordnung , aber Sie können Transpiler verwenden , um kompatibler zu sein.
Ursprüngliche ES5-Antwort:
Javascript hat keine Here-Document-Syntax. Sie können sich jedoch der wörtlichen Newline entziehen, die nahe kommt:
quelle
ES6-Update:
Wie in der ersten Antwort erwähnt, können Sie mit ES6 / Babel jetzt mehrzeilige Zeichenfolgen erstellen, indem Sie einfach Backticks verwenden:
Das Interpolieren von Variablen ist eine beliebte neue Funktion, die mit durch Back-Ticks getrennten Zeichenfolgen geliefert wird:
Dies führt nur zur Verkettung:
Ursprüngliche ES5-Antwort:
quelle
\
anstelle von `\` beenden , ist dies schwer zu bemerken] und (3) während die meisten Skript-Engines dies unterstützen, ist es nicht Teil von ECMAScript [dh warum Verwenden Sie nicht standardmäßige Funktionen?] Denken Sie daran, dass es sich um einen Styleguide handelt, bei dem es darum geht, Code einfach zu lesen, zu warten und zu debuggen: Nicht nur "es funktioniert" korrekt.Das Muster
text = <<"HERE" This Is A Multiline String HERE
ist in js nicht verfügbar (ich erinnere mich, dass ich es in meinen guten alten Perl-Tagen oft verwendet habe).Um die Übersicht über komplexe oder lange mehrzeilige Zeichenfolgen zu behalten, verwende ich manchmal ein Array-Muster:
oder das bereits angezeigte anonyme Muster (Escape Newline), was ein hässlicher Block in Ihrem Code sein kann:
Hier ist ein weiterer seltsamer, aber funktionierender Trick 1 :
externe Bearbeitung: jsfiddle
ES20xx unterstützt das Überspannen von Zeichenfolgen über mehrere Zeilen mithilfe von Vorlagenzeichenfolgen :
1 Hinweis: Dies geht verloren, nachdem Sie Ihren Code minimiert / verschleiert haben
quelle
Sie können mehrzeilige Zeichenfolgen in reinem JavaScript verwenden.
Diese Methode basiert auf der Serialisierung von Funktionen, die als implementierungsabhängig definiert ist . Es funktioniert in den meisten Browsern (siehe unten), es gibt jedoch keine Garantie dafür, dass es auch in Zukunft funktioniert. Verlassen Sie sich also nicht darauf.
Verwenden der folgenden Funktion:
Sie können hier Dokumente wie diese haben:
Die Methode wurde in folgenden Browsern erfolgreich getestet (nicht erwähnt = nicht getestet):
Seien Sie jedoch vorsichtig mit Ihrem Minifier. Es neigt dazu, Kommentare zu entfernen. Für den YUI-Kompressor beginnt ein Kommentar mit
/*!
bleibt (wie dem von mir verwendeten) .Ich denke, eine echte Lösung wäre die Verwendung von CoffeeScript .
ES6 UPDATE: Sie können Backtick verwenden, anstatt eine Funktion mit einem Kommentar zu erstellen und den Kommentar mit toString auszuführen. Die Regex müsste nur auf Strip-Spaces aktualisiert werden. Sie können auch eine String-Prototyp-Methode verwenden, um dies zu tun:
Das wäre cool. Jemand sollte diese .removeIndentation-String-Methode schreiben ...;)
quelle
Du kannst das...
quelle
Ich habe mir diese sehr jimmy manipulierte Methode einer mehrzeiligen Saite ausgedacht. Da das Konvertieren einer Funktion in eine Zeichenfolge auch alle Kommentare innerhalb der Funktion zurückgibt, können Sie die Kommentare als Zeichenfolge mit einem mehrzeiligen Kommentar / ** / verwenden. Sie müssen nur die Enden abschneiden und Sie haben Ihre Schnur.
quelle
toString()
ist.Ich bin überrascht, dass ich das nicht gesehen habe, weil es überall funktioniert, wo ich es getestet habe und sehr nützlich ist für zB Vorlagen:
Kennt jemand eine Umgebung, in der es HTML gibt, die aber nicht funktioniert?
quelle
Ich habe dieses Problem gelöst, indem ich ein div ausgegeben, ausgeblendet und die div-ID von jQuery aufgerufen habe, wenn ich es brauchte.
z.B
Wenn ich dann die Zeichenfolge abrufen muss, verwende ich einfach die folgende jQuery:
Was meinen Text in mehreren Zeilen zurückgibt. Wenn ich anrufe
Ich bekomme:
quelle
display:none
Inhalte indiziert , was höchstwahrscheinlich auf die Beliebtheit von Frontends im JavaScript-Stil zurückzuführen ist. (Zum Beispiel eine FAQ-Seite mit Funktionen zum Ausblenden / Anzeigen.) Sie müssen jedoch vorsichtig sein, da Google sagt, dass sie Sie bestrafen können, wenn der versteckte Inhalt so gestaltet zu sein scheint, dass er Ihre SEO-Rankings künstlich aufbläst.Es gibt mehrere Möglichkeiten, dies zu erreichen
1. Schrägstrichverkettung
2. regelmäßige Verkettung
3. Array Join-Verkettung
In Bezug auf die Leistung ist die Slash-Verkettung (erste) die schnellste.
In diesem Testfall finden Sie weitere Details zur Leistung
Aktualisieren:
Mit dem ES2015 können wir die Funktion für Vorlagenzeichenfolgen nutzen. Damit müssen wir nur Back-Ticks verwenden, um mehrzeilige Zeichenfolgen zu erstellen
Beispiel:
quelle
Verwenden von Skript-Tags:
<script>...</script>
Sie demhead
Tag einen Block mit Ihrem mehrzeiligen Text hinzu .Holen Sie sich Ihren mehrzeiligen Text wie er ist ... (Achten Sie auf die Textcodierung: UTF-8, ASCII)
quelle
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Ich erinnere mich nicht, dass ich andere Probleme hatte, als Kommentare in JS falsch einzugeben. Räume, in denen es keine Probleme gibt.Ich mag diese Syntax und Indendation:
(kann aber eigentlich nicht als mehrzeilige Zeichenfolge betrachtet werden)
quelle
Es gibt diese Bibliothek, die es schön macht:
https://github.com/sindresorhus/multiline
Vor
Nach
quelle
nodejs
Verwendung im Browser muss vorsichtig sein.Function.prototype.String()
.Downvoters : Dieser Code dient nur zur Information.
Dies wurde in Fx 19 und Chrome 24 auf dem Mac getestet
DEMO
quelle
Zusammenfassend habe ich zwei Ansätze ausprobiert, die hier in der Benutzer-Javascript-Programmierung (Opera 11.01) aufgeführt sind:
Daher empfehle ich den Arbeitsansatz für Opera-Benutzer JS-Benutzer. Im Gegensatz zu dem, was der Autor sagte:
Es funktioniert in Opera 11. Zumindest in Benutzer-JS-Skripten. Schade, dass ich einzelne Antworten nicht kommentieren oder die Antwort nicht bewerten kann, ich würde es sofort tun. Wenn möglich, macht es jemand mit höheren Privilegien bitte für mich.
quelle
Meine Erweiterung zu https://stackoverflow.com/a/15558082/80404 . Es erwartet einen Kommentar in einer Form,
/*! any multiline comment */
in der Symbol! wird verwendet, um das Entfernen durch Minimierung zu verhindern (zumindest für YUI-Kompressor)Beispiel:
quelle
Aktualisiert für 2015 : Es ist jetzt sechs Jahre später: Die meisten Benutzer verwenden einen Modullader, und die Hauptmodulsysteme verfügen jeweils über Möglichkeiten zum Laden von Vorlagen. Es ist nicht inline, aber die häufigste Art von mehrzeiligen Zeichenfolgen sind Vorlagen, und Vorlagen sollten im Allgemeinen sowieso aus JS herausgehalten werden .
require.js: 'Text erfordern'.
Verwenden des Text-Plugins require.js mit einer mehrzeiligen Vorlage in template.html
NPM / browserify: das 'brfs'-Modul
Browserify verwendet ein 'brfs'-Modul , um Textdateien zu laden. Dadurch wird Ihre Vorlage tatsächlich in Ihr gebündeltes HTML integriert.
Einfach.
quelle
Wenn Sie bereit sind , die maskierten Newlines zu verwenden, können sie verwendet werden , schön . Es sieht aus wie ein Dokument mit einem Seitenrand .
quelle
Das Äquivalent in Javascript ist:
Hier ist die Spezifikation . Siehe Browserunterstützung am Ende dieser Seite . Hier sind auch einige Beispiele .
quelle
Dies funktioniert in IE, Safari, Chrome und Firefox:
quelle
Sie können TypeScript (JavaScript SuperSet) verwenden, es unterstützt mehrzeilige Zeichenfolgen und transpiliert ohne Overhead zurück zu reinem JavaScript:
Wenn Sie dasselbe mit einfachem JavaScript erreichen möchten:
Beachten Sie, dass das iPad / Safari nicht unterstützt
'functionName.toString()'
Wenn Sie viel Legacy-Code haben, können Sie auch die einfache JavaScript-Variante in TypeScript verwenden (zu Bereinigungszwecken):
und Sie können das mehrzeilige Zeichenfolgenobjekt aus der einfachen JavaScript-Variante verwenden, bei dem Sie die Vorlagen in eine andere Datei einfügen (die Sie im Bundle zusammenführen können).
Sie können TypeScript unter http://www.typescriptlang.org/Playground ausprobieren
quelle
Die ES6-Methode besteht darin, Vorlagenliterale zu verwenden:
Mehr Referenz hier
quelle
Mit ES6 können Sie einen Backtick verwenden, um eine Zeichenfolge in mehreren Zeilen anzugeben. Es heißt Template Literal. So was:
Die Verwendung des Backticks funktioniert in NodeJS und wird von Chrome, Firefox, Edge, Safari und Opera unterstützt.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
quelle
Der einfachste Weg, mehrzeilige Zeichenfolgen in Javascrips zu erstellen, ist die Verwendung von Backticks (``). Auf diese Weise können Sie mehrzeilige Zeichenfolgen erstellen, in die Sie Variablen einfügen können
${variableName}
.Beispiel:
Kompatibilität:
ES6
// eingeführtes2015
Überprüfen Sie hier die genaue Kompatibilität in Mozilla-Dokumenten
quelle
Meine Version des Array-basierten Joins für String Concat:
Dies hat bei mir gut funktioniert, zumal ich häufig Werte in das so erstellte HTML einfüge. Aber es gibt viele Einschränkungen. Einrückung wäre schön. Es wäre wirklich schön, nicht mit verschachtelten Anführungszeichen umgehen zu müssen, und nur die Sperrigkeit stört mich.
Nimmt das Hinzufügen des .push () zum Array viel Zeit in Anspruch? Siehe diese verwandte Antwort:
( Gibt es einen Grund, warum JavaScript-Entwickler Array.push () nicht verwenden? )
Wenn man sich diese (gegensätzlichen) Testläufe ansieht, sieht es so aus, als ob .push () für String-Arrays in Ordnung ist, die wahrscheinlich nicht über 100 Elemente wachsen werden. Ich werde es zugunsten indizierter Adds für größere Arrays vermeiden.
quelle
Sie können verwenden,
+=
um Ihre Zeichenfolge zu verketten, scheint niemand darauf geantwortet zu haben, was lesbar und auch ordentlich sein wird ... so etwaskann auch geschrieben werden als
quelle
Beachten Sie auch, dass beim Erweitern der Zeichenfolge über mehrere Zeilen mit einem vorwärts gerichteten Backslash am Ende jeder Zeile zusätzliche Zeichen (meistens Leerzeichen, Tabulatoren und Kommentare, die versehentlich hinzugefügt wurden) nach dem vorwärts gerichteten Backslash einen unerwarteten Zeichenfehler verursachen, dessen Suche eine Stunde gedauert hat aus
quelle
Bitte verwenden Sie aus Liebe zum Internet die Verkettung von Zeichenfolgen und verwenden Sie hierfür keine ES6-Lösungen. ES6 wird NICHT auf der ganzen Linie unterstützt, ähnlich wie CSS3 und bestimmte Browser, die sich nur langsam an die CSS3-Bewegung anpassen. Verwenden Sie einfaches altes JavaScript. Ihre Endbenutzer werden es Ihnen danken.
Beispiel:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
quelle
Sie müssen den Verkettungsoperator '+' verwenden.
Durch die Nutzung
\n
Ihres Quellcodes wird wie folgt aussehen:Wenn Sie
<br>
Ihren Browser verwenden, sieht die Ausgabe wie folgt aus:quelle
Ich denke, diese Problemumgehung sollte in IE, Chrome, Firefox, Safari, Opera funktionieren -
Verwenden von jQuery :
Verwenden von reinem Javascript:
Prost!!
quelle
<xmp>
ist so veraltet. Es ist möglicherweise in HTML zulässig, sollte jedoch von keinem Autor verwendet werden. Siehe stackoverflow.com/questions/8307846/…<pre>;
mit Escapezeichen wird bei meiner Lösung nicht helfen .. Ich bin heute auf ein ähnliches Problem gestoßen und habe versucht, eine Problemumgehung zu finden .. aber in meinem Fall habe ich einen sehr einfachen Weg gefunden, um dieses Problem zu beheben Platzieren der Ausgabe in HTML-Kommentaren anstelle von <xmp> oder einem anderen Tag. lol. Ich weiß, dass dies kein Standard ist, aber ich werde morgen früh mehr an diesem Thema arbeiten. Prost !!style="display:none"
versucht auch Chrome,<img>
die im Beispielblock genannten Bilder zu laden .Ich habe gerade die anonyme Antwort ausprobiert und festgestellt, dass es hier einen kleinen Trick gibt. Es funktioniert nicht, wenn nach dem Backslash ein Leerzeichen steht.
\
Die folgende Lösung funktioniert also nicht -
Aber wenn Platz entfernt wird, funktioniert es -
Ich hoffe es hilft !!
quelle