我有以下的 Ruby 代码。我想将这段代码转换成 JavaScript。请问在 JavaScript 中等价的代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
我有以下的 Ruby 代码。我想将这段代码转换成 JavaScript。请问在 JavaScript 中等价的代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
+=
来连接您的字符串。似乎没有人回答这个问题,这样做将会更易于阅读,同时保持整洁... 就像这样。var hello = 'hello' +
'world' +
'blah';
可以写成
var hello = 'hello';
hello += ' world';
hello += ' blah';
console.log(hello);
我的基于数组的字符串连接版本:
var c = []; //c stands for content
c.push("<div id='thisDiv' style='left:10px'></div>");
c.push("<div onclick='showDo(\'something\');'></div>");
$(body).append(c.join('\n'));
这种方式对我来说效果很好,特别是我经常将值插入到这样构建的html中。但它有很多限制。缩进会很好。不必处理嵌套引号会非常好,而且它的笨重也让我感到困扰。
使用.push()添加到数组会占用很多时间吗?请参见此相关答案:
(JavaScript开发人员为什么不使用Array.push()?)
在查看这些(相反的)测试运行后,看起来.push()对于不太可能超过100个项目的字符串数组是可以的 - 对于较大的数组,我将避免使用它而改用索引添加。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p id="demo"></p>
<script>
var str = "This "
+ "\n<br>is "
+ "\n<br>multiline "
+ "\n<br>string.";
document.getElementById("demo").innerHTML = str;
</script>
</body>
</html>
使用\n
,你的源代码看起来像这样 -
This <br>is <br>multiline <br>string.
使用<br>
,你的浏览器输出将会长成这个样子 -
This is multiline string.
在2015年ES6被引入时,JavaScript终于拥有了处理多行字符串的良好方式——模板字面量。
模板字面量是由反引号(``)包围的字符串,而不是常规的单引号('')/双引号("")。
我认为这种解决方法在IE、Chrome、Firefox、Safari和Opera中都能正常工作 -
使用jQuery:
<xmp id="unique_id" style="display:none;">
Some plain text
Both type of quotes : " ' " And ' " '
JS Code : alert("Hello World");
HTML Code : <div class="some_class"></div>
</xmp>
<script>
alert($('#unique_id').html());
</script>
<xmp id="unique_id" style="display:none;">
Some plain text
Both type of quotes : " ' " And ' " '
JS Code : alert("Hello World");
HTML Code : <div class="some_class"></div>
</xmp>
<script>
alert(document.getElementById('unique_id').innerHTML);
</script>
干杯!!
<pre>;
和转义字符不会帮助解决我的问题。我今天遇到了类似的问题,正在尝试找到一个解决方法。但是在我的情况下,我发现一种非常新手的解决方法是将输出放在HTML注释中,而不是<xmp>或任何其他标记中。哈哈。我知道这不是一种标准的做法,但我明天早上会继续解决这个问题。干杯! - Aditya Hajarestyle="display:none"
,Chrome 仍然会尝试加载示例块中提到的任何 <img>
图像。 - Jesse Glick刚试了匿名回答,发现这里有一个小技巧,如果反斜杠\
后面有空格,它就不起作用了。
因此,以下解决方案无法正常工作-
var x = { test:'<?xml version="1.0"?>\ <-- One space here
<?mso-application progid="Excel.Sheet"?>'
};
var x = { test:'<?xml version="1.0"?>\<-- No space here now
<?mso-application progid="Excel.Sheet"?>'
};
alert(x.test);
希望能对你有所帮助!
我是这样编程的:
sys = {
layout: null,
makeLayout: function (obCLS) {
this.layout = $('<div />').addClass('editor').appendTo($(obCLS)).append(
/* Cargador */
/* @this.layout.find('> div:nth-of-child(1)'); */
'<div>' +
' <p>Seleccione la imagen que desea procesar.</p>' +
' <input type="button" value="Seleccionar" class="btn btn-xlarge btn-success" />' +
' <span></span>' +
'</div>' +
/* Cargador - Progreso */
/* @this.layout.find('> div:nth-of-child(2)'); */
'<div>' +
' <div>' +
' <div></div>' +
' <div>' +
' <div></div>' +
' </div>' +
' </div>' +
'</div>' +
/* Editor */
/* @this.layout.find('> div:nth-of-child(3)');
* @sidebar = this.layout.find('> div:nth-of-child(3) > div > div > div:nth-of-type(1)');
* @body = this.layout.find('> div:nth-of-child(3) > div > div > div:nth-of-type(2) > div'); */
'<div>' +
' <div>' +
' <div>' +
' <div></div>' +
' <div>' +
' <div></div>' +
' </div>' +
' </div>' +
' </div>' +
'</div>'
);
}
}
sys.makeLayout('#div');
如果你只在Node中运行,你可以使用fs模块从文件中读取多行字符串:
var diagram;
var fs = require('fs');
fs.readFile( __dirname + '/diagram.txt', function (err, data) {
if (err) {
throw err;
}
diagram = data.toString();
});
我认为我发现了另一种方法,可以在每行没有任何侵入性语法的情况下进行内联操作。使用Javascript将函数转换为字符串的能力,并使用/**/
语法创建多行注释,然后删除"function() {/*\n"和"\n*/}"。
var multiline = function(string) { return string.toString().replace(/(^[^\n]*\n)|(\n\*\/\})/g, ""); };
console.log(multiline(function() {/*
Hello world!
I'm a multiline string!
Tada!
*/}));
我能看到的唯一陷阱就是语法高亮。
编辑:如果我向下滚动一点,我会看到这个答案做了完全相同的事情:https://dev59.com/c3RA5IYBdhLWcg3w2xsI#5571069