Eu tenho o seguinte código em Ruby. Quero converter esse código em JavaScript. qual é o código equivalente em JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Eu tenho o seguinte código em Ruby. Quero converter esse código em JavaScript. qual é o código equivalente em JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Respostas:
Atualizar:
O ECMAScript 6 (ES6) introduz um novo tipo de literal, ou seja, literais de modelo . Eles têm muitos recursos, interpolação variável entre outros, mas o mais importante para essa questão, eles podem ser multilinhas.
Um literal de modelo é delimitado por backticks :
(Nota: não estou defendendo o uso de HTML em strings)
O suporte ao navegador é bom , mas você pode usar transpilers para ser mais compatível.
Resposta original do ES5:
Javascript não tem uma sintaxe aqui-documento. Você pode escapar da nova linha literal, no entanto, que se aproxima:
fonte
Atualização do ES6:
Como a primeira resposta menciona, com o ES6 / Babel, agora você pode criar seqüências de várias linhas simplesmente usando backticks:
A interpolação de variáveis é um novo recurso popular que vem com seqüências delimitadas por back-tick:
Isso apenas transpila para concatenação:
Resposta original do ES5:
fonte
\
vez de `\`, é difícil perceber] e (3) enquanto a maioria dos mecanismos de script suporta isso, não faz parte do ECMAScript [ou seja, por que use recursos fora do padrão?] Lembre-se de que é um guia de estilo, que trata de facilitar a leitura do código + manter + depurar: não apenas "funciona" corretamente.o padrão
text = <<"HERE" This Is A Multiline String HERE
não está disponível em js (lembro-me de usá-lo muito nos meus bons e velhos dias Perl).Para manter a supervisão de cadeias multilinhas complexas ou longas, às vezes uso um padrão de matriz:
ou o padrão anônimo já exibido (escape newline), que pode ser um bloco feio no seu código:
Aqui está outro truque estranho, mas funcional 1 :
edição externa: jsfiddle
O ES20xx suporta seqüências de expansão em várias linhas usando cadeias de modelo :
1 Nota: isso será perdido após minificar / ofuscar seu código
fonte
Você pode ter cadeias de linhas múltiplas em JavaScript puro.
Este método é baseado na serialização de funções, que é definida como dependente da implementação . Ele funciona na maioria dos navegadores (veja abaixo), mas não há garantia de que ainda funcione no futuro, portanto, não confie nele.
Usando a seguinte função:
Você pode ter documentos aqui como este:
O método foi testado com sucesso nos seguintes navegadores (não mencionados = não testados):
Tenha cuidado com seu minifier, no entanto. Tende a remover comentários. Para o compressor YUI , um comentário começando com
/*!
(como o que eu usei) será preservado.Eu acho que uma solução real seria usar o CoffeeScript .
ES6 UPDATE: Você pode usar o backtick em vez de criar uma função com um comentário e executar toString no comentário. O regex precisaria ser atualizado para apenas remover espaços. Você também pode ter um método de protótipo de string para fazer isso:
Isso seria legal. Alguém deve escrever este método de string .removeIndentation ...;)
fonte
Você consegue fazer isso...
fonte
Eu vim com esse método muito jimmy de uma corda de várias linhas. Como a conversão de uma função em uma string também retorna quaisquer comentários dentro da função, você pode usá-los como sua string usando um comentário multilinhado / ** /. Você apenas tem que cortar as pontas e tem sua corda.
fonte
toString()
é.Estou surpreso por não ter visto isso, porque funciona em qualquer lugar que eu testei e é muito útil para, por exemplo, modelos:
Alguém conhece um ambiente em que haja HTML, mas ele não funciona?
fonte
Resolvi isso produzindo um div, ocultando-o e chamando o div id pelo jQuery quando necessário.
por exemplo
Então, quando preciso obter a string, apenas uso o seguinte jQuery:
O que retorna meu texto em várias linhas. Se eu ligar
Eu recebo:
fonte
display:none
conteúdo, provavelmente devido à popularidade dos front-ends no estilo JavaScript. (Por exemplo, uma página de Perguntas frequentes com a funcionalidade ocultar / mostrar.) Porém, você precisa ter cuidado, porque o Google diz que eles podem puni-lo se o conteúdo oculto parece ter sido projetado para aumentar artificialmente seus rankings de SEO.Existem várias maneiras de conseguir isso
1. Concatenação de barra
2. concatenação regular
3. Concatenação de junção de matriz
Em termos de desempenho, a concatenação do Slash (primeira) é a mais rápida.
Consulte este caso de teste para obter mais detalhes sobre o desempenho
Atualizar:
Com o ES2015 , podemos tirar proveito do recurso de strings de modelo. Com isso, precisamos usar back-ticks para criar strings de várias linhas
Exemplo:
fonte
Usando tags de script:
<script>...</script>
bloco contendo seu texto de múltiplas linhas nahead
tag;obtenha seu texto multilinha como está ... (cuidado com a codificação de texto: UTF-8, ASCII)
fonte
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
. Não me lembro de ter outros problemas além de digitar comentários incorretamente no JS. Espaços onde não há problemas.Eu gosto desta sintaxe e indendação:
(mas na verdade não pode ser considerado como sequência de múltiplas linhas)
fonte
Existe essa biblioteca que a torna bonita:
https://github.com/sindresorhus/multiline
Antes
Depois de
fonte
nodejs
uso no navegador deve ser cuidadoso.Function.prototype.String()
.Downvoters : Este código é fornecido apenas para informação.
Isso foi testado no Fx 19 e no Chrome 24 no Mac
DEMO
fonte
para resumir, tentei duas abordagens listadas aqui na programação javascript do usuário (Opera 11.01):
Portanto, recomendo a abordagem de trabalho para usuários JS do Opera. Ao contrário do que o autor estava dizendo:
Funciona no Opera 11. Pelo menos nos scripts JS do usuário. Pena que não posso comentar sobre respostas individuais ou aprovar a resposta, eu faria isso imediatamente. Se possível, alguém com maiores privilégios, faça isso por mim.
fonte
Minha extensão para https://stackoverflow.com/a/15558082/80404 . Espera comentário em uma forma
/*! any multiline comment */
onde símbolo! é usado para impedir a remoção por minificação (pelo menos para o compressor YUI)Exemplo:
fonte
Atualizado para 2015 : agora são seis anos: a maioria das pessoas usa um carregador de módulos, e os principais sistemas de módulos têm maneiras de carregar modelos. Não está embutido, mas o tipo mais comum de sequência multilinha são os modelos, e os modelos geralmente devem ser mantidos fora do JS de qualquer maneira .
require.js: 'requer texto'.
Usando o plug-in require.js 'text' , com um modelo de múltiplas linhas em template.html
NPM / browserify: o módulo 'brfs'
O Browserify usa um módulo 'brfs' para carregar arquivos de texto. Na verdade, isso criará seu modelo em seu HTML incluído.
Fácil.
fonte
Se você estiver disposto a usar as novas linhas de escape, elas podem ser usadas com agrado . Parece um documento com uma borda de página .
fonte
O equivalente em javascript é:
Aqui está a especificação . Veja o suporte ao navegador na parte inferior desta página . Aqui estão alguns exemplos também.
fonte
Isso funciona no IE, Safari, Chrome e Firefox:
fonte
Você pode usar o TypeScript (JavaScript SuperSet), ele suporta seqüências de várias linhas e transpila de volta para o JavaScript puro sem sobrecarga:
Se você deseja fazer o mesmo com JavaScript simples:
Observe que o iPad / Safari não suporta
'functionName.toString()'
Se você possui muito código herdado, também pode usar a variante JavaScript simples no TypeScript (para fins de limpeza):
e você pode usar o objeto de cadeia de linhas múltiplas da variante JavaScript simples, onde coloca os modelos em outro arquivo (que pode ser mesclado no pacote configurável).
Você pode experimentar o TypeScript em
http://www.typescriptlang.org/Playground
fonte
A maneira ES6 de fazer isso seria usando literais de modelo:
Mais referência aqui
fonte
O ES6 permite que você use um backtick para especificar uma sequência em várias linhas. É chamado de Modelo Literal. Como isso:
O uso do backtick funciona no NodeJS e é suportado pelo Chrome, Firefox, Edge, Safari e Opera.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
fonte
A maneira mais fácil de criar strings de várias linhas em Javascrips é usando backticks (``). Isso permite criar cadeias de linhas múltiplas nas quais você pode inserir variáveis
${variableName}
.Exemplo:
compatibilidade:
ES6
//es2015
Verifique a compatibilidade exata nos documentos do Mozilla aqui
fonte
Minha versão da junção baseada em array para string concat:
Isso funcionou bem para mim, especialmente porque geralmente insiro valores no html construído dessa maneira. Mas tem muitas limitações. Recuo seria bom. Não ter que lidar com aspas aninhadas seria muito bom, e apenas a volumosidade disso me incomoda.
O .push () a ser adicionado à matriz está demorando muito tempo? Veja esta resposta relacionada:
( Existe uma razão pela qual os desenvolvedores de JavaScript não usam Array.push ()? )
Depois de analisar essas execuções de teste (opostas), parece que .push () é bom para matrizes de strings que provavelmente não crescerão mais de 100 itens - evitarei isso em favor de adições indexadas para matrizes maiores.
fonte
Você pode usar
+=
para concatenar sua string, parece que ninguém respondeu a isso, o que será legível e também elegante ... algo como istotambém pode ser escrito como
fonte
Observe também que, ao estender a seqüência de caracteres em várias linhas usando a barra invertida no final de cada linha, qualquer caractere extra (principalmente espaços, guias e comentários adicionados por engano) após a barra invertida causará um erro inesperado de caractere, que levei uma hora para encontrar Fora
fonte
Por amor à Internet, use a concatenação de strings e opte por não usar as soluções ES6 para isso. O ES6 NÃO é suportado em todos os aspectos, assim como o CSS3 e alguns navegadores demoram a se adaptar ao movimento do CSS3. Use JavaScript simples, seus usuários finais agradecerão.
Exemplo:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
fonte
Você precisa usar o operador de concatenação '+'.
Ao usar
\n
seu código-fonte, será semelhante a -Ao usar
<br>
a saída do navegador, será semelhante a:fonte
Acho que essa solução alternativa deve funcionar no IE, Chrome, Firefox, Safari, Opera -
Usando jQuery :
Usando Javascript Puro:
Felicidades!!
fonte
<xmp>
está tão obsoleto. Pode ser permitido em HTML, mas não deve ser usado por nenhum autor. Veja stackoverflow.com/questions/8307846/…<pre>;
escapes não ajudará na minha solução .. Me deparei com um problema semelhante hoje e tentando descobrir uma solução alternativa .. mas no meu caso, encontrei uma maneira muito n00bish de corrigir esse problema colocando a saída em comentários html em vez de <xmp> ou qualquer outra tag. ri muito. Sei que não é uma maneira padrão de fazer isso, mas vou trabalhar nessa questão mais amanhã de manhã .. Saúde !!style="display:none"
Chrome, tenta carregar as<img>
imagens mencionadas no bloco de exemplo.Tentei a resposta anônima e descobri que há um pequeno truque aqui, não funciona se houver um espaço após a barra invertida.
\
Portanto, a solução a seguir não funciona -
Mas quando o espaço é removido, ele funciona -
Espero que ajude !!
fonte