J'ai le code suivant en Ruby. Je veux convertir ce code en JavaScript. quel est le code équivalent dans JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
javascript
string
multiline
heredoc
Nouvelle y
la source
la source
Réponses:
Mise à jour:
ECMAScript 6 (ES6) introduit un nouveau type de littéral, à savoir les littéraux de modèle . Ils ont de nombreuses fonctionnalités, interpolation variable entre autres, mais surtout pour cette question, ils peuvent être multilignes.
Un littéral de modèle est délimité par des backticks :
(Remarque: je ne préconise pas d'utiliser HTML dans les chaînes)
Le support du navigateur est OK , mais vous pouvez utiliser des transpilers pour être plus compatible.
Réponse originale ES5:
Javascript n'a pas de syntaxe ici-document. Vous pouvez cependant échapper à la nouvelle ligne littérale qui se rapproche:
la source
Mise à jour ES6:
Comme le mentionne la première réponse, avec ES6 / Babel, vous pouvez maintenant créer des chaînes multilignes simplement en utilisant des raccourcis:
L'interpolation des variables est une nouvelle fonctionnalité populaire qui vient avec des chaînes délimitées par des graduations:
Cela se traduit simplement par concaténation:
Réponse originale ES5:
la source
\
au lieu de `\` c'est difficile à remarquer] et (3) alors que la plupart des moteurs de script le supportent, il ne fait pas partie d'ECMAScript [c'est-à-dire pourquoi utiliser des fonctionnalités non standard?] Rappelez-vous que c'est un guide de style, qui consiste à rendre le code facile à lire + à maintenir + à déboguer: pas seulement "ça marche" correct.le motif
text = <<"HERE" This Is A Multiline String HERE
n'est pas disponible en js (je me souviens de l'avoir beaucoup utilisé pendant mes bons vieux jours Perl).Pour garder la surveillance avec des chaînes multilignes complexes ou longues, j'utilise parfois un modèle de tableau:
ou le motif anonyme déjà montré (escape newline), qui peut être un vilain bloc dans votre code:
Voici un autre "truc" 1 étrange mais qui fonctionne : 1
édition externe: jsfiddle
ES20xx prend en charge les chaînes s'étendant sur plusieurs lignes à l'aide de chaînes de modèle :
1 Remarque: cela sera perdu après avoir réduit / obscurci votre code
la source
Vous pouvez avoir des chaînes multilignes en JavaScript pur.
Cette méthode est basée sur la sérialisation des fonctions, qui est définie comme dépendante de l'implémentation . Il fonctionne dans la plupart des navigateurs (voir ci-dessous), mais il n'y a aucune garantie qu'il fonctionnera toujours à l'avenir, alors ne vous y fiez pas.
En utilisant la fonction suivante:
Vous pouvez avoir ici des documents comme celui-ci:
La méthode a été testée avec succès dans les navigateurs suivants (non mentionnés = non testés):
Soyez prudent avec votre minificateur, cependant. Cela a tendance à supprimer les commentaires. Pour le compresseur YUI , un commentaire commençant par
/*!
(comme celui que j'ai utilisé) sera conservé.Je pense qu'une vraie solution serait d'utiliser CoffeeScript .
MISE À JOUR ES6: Vous pouvez utiliser le backtick au lieu de créer une fonction avec un commentaire et d'exécuter toString sur le commentaire. Le regex devrait être mis à jour pour ne supprimer que les espaces. Vous pouvez également avoir une méthode de prototype de chaîne pour ce faire:
Ce serait cool. Quelqu'un devrait écrire cette méthode de chaîne .removeIndentation ...;)
la source
Tu peux le faire...
la source
Je suis venu avec cette méthode truquée très jimmy d'une chaîne multi doublée. Étant donné que la conversion d'une fonction en chaîne renvoie également tous les commentaires à l'intérieur de la fonction, vous pouvez utiliser les commentaires comme chaîne en utilisant un commentaire multiligne / ** /. Il vous suffit de couper les extrémités et vous avez votre chaîne.
la source
toString()
.Je suis surpris de ne pas l'avoir vu, car cela fonctionne partout où je l'ai testé et est très utile, par exemple pour les modèles:
Quelqu'un connaît-il un environnement où il y a du HTML mais cela ne fonctionne pas?
la source
J'ai résolu ce problème en générant un div, en le rendant caché et en appelant l'ID de div par jQuery lorsque j'en avais besoin.
par exemple
Ensuite, lorsque j'ai besoin d'obtenir la chaîne, j'utilise simplement le jQuery suivant:
Ce qui renvoie mon texte sur plusieurs lignes. Si j'appelle
Je reçois:
la source
display:none
contenu, probablement en raison de la popularité des frontaux de style JavaScript. (Par exemple, une page de FAQ avec des fonctionnalités de masquage / affichage.) Vous devez cependant être prudent, car Google dit qu'ils peuvent vous punir si le contenu masqué semble être conçu pour gonfler artificiellement votre classement SEO.Il existe plusieurs façons d'y parvenir
1. Concaténation de barre oblique
2. concaténation régulière
3. Array Join concatenation
Côté performances, la concaténation Slash (première) est la plus rapide.
Reportez - vous à ce cas de test pour plus de détails concernant les performances
Mise à jour:
Avec l' ES2015 , nous pouvons profiter de sa fonction de chaînes de modèles. Avec cela, nous avons juste besoin d'utiliser des back-ticks pour créer des chaînes multi-lignes
Exemple:
la source
Utilisation de balises de script:
<script>...</script>
bloc contenant votre texte multiligne dans lahead
balise;obtenez votre texte multiligne tel quel ... (attention au codage du texte: UTF-8, ASCII)
la source
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Je ne me souviens pas avoir eu d'autres problèmes que de mal saisir les commentaires dans JS. Des espaces où aucun problème.J'aime cette syntaxe et cette indentation:
(mais ne peut pas être considéré comme une chaîne multiligne)
la source
Il y a cette bibliothèque qui la rend belle:
https://github.com/sindresorhus/multiline
Avant
Après
la source
nodejs
, en utilisant dans le navigateur doit être attentif.Function.prototype.String()
.Downvoters : Ce code est fourni à titre d'information uniquement.
Cela a été testé dans Fx 19 et Chrome 24 sur Mac
DEMO
la source
pour résumer, j'ai essayé 2 approches listées ici dans la programmation javascript de l'utilisateur (Opera 11.01):
Je recommande donc l'approche de travail pour les utilisateurs JS d'Opera. Contrairement à ce que l'auteur disait:
Il fonctionne dans Opera 11. Au moins dans les scripts JS utilisateur. Dommage que je ne puisse pas commenter les réponses individuelles ou voter la réponse, je le ferais immédiatement. Si possible, quelqu'un avec des privilèges plus élevés, faites-le pour moi.
la source
Mon extension à https://stackoverflow.com/a/15558082/80404 . Il attend un commentaire sous une forme
/*! any multiline comment */
où le symbole! est utilisé pour empêcher le retrait par minification (au moins pour le compresseur YUI)Exemple:
la source
Mise à jour pour 2015 : c'est six ans plus tard maintenant: la plupart des gens utilisent un chargeur de module, et les systèmes de modules principaux ont chacun des moyens de charger des modèles. Ce n'est pas en ligne, mais le type de chaîne multiligne le plus courant est les modèles, et les modèles doivent généralement être gardés hors de JS de toute façon .
require.js: «exiger du texte».
Utilisation du plugin 'text' require.js , avec un modèle multiligne dans template.html
NPM / browserify: le module 'brfs'
Browserify utilise un module «brfs» pour charger les fichiers texte. Cela créera en fait votre modèle dans votre code HTML groupé.
Facile.
la source
Si vous êtes prêt à utiliser les sauts de ligne échappés, ils peuvent être bien utilisés . Il ressemble à un document avec une bordure de page .
la source
L'équivalent en javascript est:
Voici la spécification . Voir le support du navigateur au bas de cette page . Voici également quelques exemples .
la source
Cela fonctionne dans IE, Safari, Chrome et Firefox:
la source
Vous pouvez utiliser TypeScript (JavaScript SuperSet), il prend en charge les chaînes multilignes et les transpile en JavaScript pur sans surcharge:
Si vous souhaitez accomplir la même chose avec du JavaScript simple:
Notez que l'iPad / Safari ne prend pas en charge
'functionName.toString()'
Si vous avez beaucoup de code hérité, vous pouvez également utiliser la variante JavaScript simple dans TypeScript (à des fins de nettoyage):
et vous pouvez utiliser l'objet chaîne multiligne de la variante JavaScript simple, où vous placez les modèles dans un autre fichier (que vous pouvez fusionner dans le bundle).
Vous pouvez essayer TypeScript sur
http://www.typescriptlang.org/Playground
la source
La manière ES6 de le faire serait d'utiliser des littéraux de modèle:
Plus de référence ici
la source
ES6 vous permet d'utiliser un backtick pour spécifier une chaîne sur plusieurs lignes. Cela s'appelle un modèle littéral. Comme ça:
L'utilisation du backtick fonctionne dans NodeJS et est prise en charge par Chrome, Firefox, Edge, Safari et Opera.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
la source
Le moyen le plus simple de créer des chaînes multilignes dans Javascrips est d'utiliser des astuces (``). Cela vous permet de créer des chaînes multilignes dans lesquelles vous pouvez insérer des variables avec
${variableName}
.Exemple:
compatibilité :
ES6
//es2015
Vérifiez la compatibilité exacte dans les documents Mozilla ici
la source
Ma version de jointure basée sur un tableau pour la concaténation de chaînes:
Cela a bien fonctionné pour moi, d'autant plus que j'insère souvent des valeurs dans le html construit de cette façon. Mais il a beaucoup de limites. Le retrait serait bien. Ne pas avoir à traiter avec des guillemets imbriqués serait vraiment bien, et juste l'encombrement me dérange.
Le .push () à ajouter au tableau prend-il beaucoup de temps? Voir cette réponse connexe:
( Y a - t-il une raison pour laquelle les développeurs JavaScript n'utilisent pas Array.push ()? )
Après avoir regardé ces tests (opposés), il semble que .push () soit bien pour les tableaux de chaînes qui ne dépasseront probablement pas plus de 100 éléments - je l'éviterai en faveur des ajouts indexés pour les tableaux plus grands.
la source
Vous pouvez utiliser
+=
pour concaténer votre chaîne, il semble que personne n'a répondu à cela, ce qui sera lisible, et aussi soigné ... quelque chose comme çapeut aussi s'écrire
la source
Notez également que, lors de l'extension de la chaîne sur plusieurs lignes à l'aide d'une barre oblique inverse à la fin de chaque ligne, tout caractère supplémentaire (principalement des espaces, des tabulations et des commentaires ajoutés par erreur) après la barre oblique inverse provoquera une erreur de caractère inattendue, que j'ai mis une heure à trouver en dehors
la source
Pour l'amour d'Internet, utilisez la concaténation de chaînes et choisissez de ne pas utiliser les solutions ES6 pour cela. ES6 n'est PAS pris en charge dans tous les domaines, tout comme CSS3 et certains navigateurs étant lents à s'adapter au mouvement CSS3. Utilisez JavaScript tout simplement, vos utilisateurs finaux vous remercieront.
Exemple:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
la source
Vous devez utiliser l'opérateur de concaténation '+'.
En utilisant
\n
votre code source ressemblera à -En utilisant
<br>
la sortie de votre navigateur, vous aurez l'impression -la source
Je pense que cette solution devrait fonctionner dans IE, Chrome, Firefox, Safari, Opera -
Utilisation de jQuery :
Utilisation de Javascript pur:
À votre santé!!
la source
<xmp>
est tellement obsolète. Il peut être autorisé en HTML, mais ne doit être utilisé par aucun auteur. Voir stackoverflow.com/questions/8307846/…<pre>;
avec des échappements n'aidera pas ma solution .. J'ai rencontré un problème similaire aujourd'hui et j'essaie de trouver une solution .. mais dans mon cas, j'ai trouvé un moyen très n00bish de résoudre ce problème en mettre la sortie dans des commentaires html au lieu de <xmp> ou de toute autre balise. lol. Je sais que ce n'est pas une façon standard de le faire, mais je travaillerai sur cette question plus demain matin .. A bientôt !!style="display:none"
Chrome, il essaie de charger les<img>
images mentionnées dans l'exemple de bloc.Je viens d'essayer la réponse anonyme et j'ai trouvé qu'il y avait une petite astuce ici, cela ne fonctionne pas s'il y a un espace après la barre oblique inverse.
\
La solution suivante ne fonctionne donc pas -
Mais lorsque l'espace est supprimé, cela fonctionne -
J'espère que cela aide !!
la source