我在Ruby中有以下代码。我想将此代码转换为JavaScript。什么是JS中的等效代码?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
我在Ruby中有以下代码。我想将此代码转换为JavaScript。什么是JS中的等效代码?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
ECMAScript 6(ES6)引入了一种新的文字,即 模板文字。它们具有许多特征,其中包括可变插值,但最重要的是,对于这个问题,它们可以是多线的。
模板文字由分隔 反引号:
var html = `
<div>
<span>Some HTML here</span>
</div>
`;
(注意:我不主张在字符串中使用HTML)
浏览器支持是可以的,但你可以使用 transpilers 更兼容。
Javascript没有here-document语法。但是,你可以逃避文字换行符,它接近:
"foo \
bar"
正如第一个回答提到的那样,使用ES6 / Babel,你现在可以简单地使用反引号来创建多行字符串:
const htmlString = `Say hello to
multi-line
strings!`;
插值变量是一种流行的新功能,它带有反向划分的字符串:
const htmlString = `${user.name} liked your post about strings`;
这只是简化为串联:
user.name + ' liked your post about strings'
谷歌的JavaScript风格指南 建议使用字符串连接而不是转义换行符:
不要这样做:
var myString = 'A rather long string of English text, an error message \ actually that just keeps going and going -- an error \ message to make the Energizer bunny blush (right through \ those Schwarzenegger shades)! Where was I? Oh yes, \ you\'ve got an error and all the extraneous whitespace is \ just gravy. Have a nice day.';
在编译时无法安全地剥离每行开头的空格;斜杠后的空格会导致棘手的错误;虽然大多数脚本引擎支持这一点,但它不是ECMAScript的一部分。
请改用字符串连接:
var myString = 'A rather long string of English text, an error message ' + 'actually that just keeps going and going -- an error ' + 'message to make the Energizer bunny blush (right through ' + 'those Schwarzenegger shades)! Where was I? Oh yes, ' + 'you\'ve got an error and all the extraneous whitespace is ' + 'just gravy. Have a nice day.';
模式 text = <<"HERE" This Is A Multiline String HERE
是不是在js中可用(我记得在我很好的旧Perl时代使用它)。
为了保持对复杂或长多行字符串的监督,我有时会使用数组模式:
var myString =
['<div id="someId">',
'some content<br />',
'<a href="#someRef">someRefTxt</a>',
'</div>'
].join('\n');
或者匿名模式已经显示(转义换行符),这可能是代码中一个丑陋的块:
var myString =
'<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';
这是另一个奇怪但有效的'技巧'1:
var myString = (function () {/*
<div id="someId">
some content<br />
<a href="#someRef">someRefTxt</a>
</div>
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
外部编辑: 的jsfiddle
[另外2015年]
ES6支持使用多行生成字符串 模板字符串:
let str = `This is a text
with multiple lines.
Escapes are interpreted,
\n is a newline.`;
let str = String.raw`This is a text
with multiple lines.
Escapes are not interpreted,
\n is not a newline.`;
1 注意:在缩小/混淆代码后,这将丢失
您 能够 在纯JavaScript中有多行字符串。
此方法基于函数的序列化,即 定义为依赖于实现。它在大多数浏览器中都可以工作(见下文),但不能保证它将来仍能使用,所以不要依赖它。
使用以下功能:
function hereDoc(f) {
return f.toString().
replace(/^[^\/]+\/\*!?/, '').
replace(/\*\/[^\/]+$/, '');
}
你可以在这里 - 像这样的文件:
var tennysonQuote = hereDoc(function() {/*!
Theirs not to make reply,
Theirs not to reason why,
Theirs but to do and die
*/});
该方法已在以下浏览器中成功测试过(未提及=未测试):
但是要小心你的缩放器。它往往会删除评论。为了 YUI压缩机,以评论开头 /*!
(就像我用的那个)将被保留。
我想一个 真实 解决方案就是使用 CoffeeScript的。
你可以这样做...
var string = 'This is\n' +
'a multiline\n' +
'string';
我想出了这种多线式弦乐器的装配方法。由于将函数转换为字符串也会返回函数内的任何注释,您可以使用多行注释/ ** /将注释用作字符串。你只需要修剪两端,你就有了你的字符串。
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)
我很惊讶我没有看到这个,因为它在我测试它的任何地方都有用,并且对于例如它非常有用。模板:
<script type="bogus" id="multi">
My
multiline
string
</script>
<script>
alert($('#multi').html());
</script>
有没有人知道有HTML的环境但它不起作用?
我通过输出div,使其隐藏,并在需要时通过jQuery调用div id来解决这个问题。
例如
<div id="UniqueID" style="display:none;">
Strings
On
Multiple
Lines
Here
</div>
然后,当我需要获取字符串时,我只使用以下jQuery:
$('#UniqueID').html();
这会在多行返回我的文字。如果我打电话
alert($('#UniqueID').html());
我明白了:
使用脚本标签:
<script>...</script>
包含多行文字的块 head
标签;按原样获取多行文本...(注意文本编码: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>