多行字符串包含javascript中的特殊字符?

时间:2009-01-20 11:57:30

标签: javascript processing

我正在尝试使用http://ejohn.org/blog/processingjs/处的javascript处理端口我想使用以下构造函数。 Processing(CanvasElement, "some massive block of code");我知道javascript本身不支持多行字符串,但有没有办法传递类似下面的内容而不必连接每一行并转义每个特殊字符?

/**
 * Array. 
 * 
 * An array is a list of data. Each piece of data in an array 
 * is identified by an index number representing its position in 
 * the array. Arrays are zero based, which means that the first 
 * element in the array is [0], the second element is [1], and so on. 
 * In this example, an array named "coswav" is created and
 * filled with the cosine values. This data is displayed three 
 * separate ways on the screen.  
 */

size(200, 200);

float[] coswave = new float[width];

for (int i = 0; i < width; i++) {
  float amount = map(i, 0, width, 0, PI);
  coswave[i] = abs(cos(amount));
}

for (int i = 0; i < width; i++) {
  stroke(coswave[i]*255);
  line(i, 0, i, height/3);
}

for (int i = 0; i < width; i++) {
  stroke(coswave[i]*255 / 4);
  line(i, height/3, i, height/3*2);
}

for (int i = 0; i < width; i++) {
  stroke(255 - coswave[i]*255);
  line(i, height/3*2, i, height);
}

5 个答案:

答案 0 :(得分:3)

Javascript实际上支持多行字符串:在每行的末尾附加一个反斜杠:

alert('1\
    2\
    3');

不是很漂亮,但它确实有效。

另一种方法是使用脚本对文本进行编码...我建议使用PHP,因为它是1行代码:

<?=json_encode('your text');?>

答案 1 :(得分:1)

对于更易于维护的解决方案,我会将其放在页面正文中的脚本标记标记中,例如:

<script type="text/processing" id="code">
/**
 * Array. 
 * ...
 */

size(200, 200);
...
</script>

构建您的Processing对象,如:

var canvas = document.getElementById('canvas');
var code = document.getElementById('code');
Processing(canvas , code.textContent);

对于快速而肮脏的解决方案,您可以通过JSON编码器RoBorg suggested运行处理代码,然后您将获得一个可以复制并粘贴到第二个参数中的字符串。

答案 2 :(得分:0)

将“大量代码块”放在服务器上的自己的文件中,使用AJAX获取并确保它具有合理的缓存头。

答案 3 :(得分:0)

或者,您可以将文本放在HTML页面中(例如隐藏)并从那里获取...

答案 4 :(得分:0)

另一种选择是使用E4X文字

var s = "" + <r><![CDATA[
line 1
line 2
]]></r>;

虽然我怀疑IE6支持它。