Java:carriage返回在js代码中填充var?

时间:2012-08-03 14:59:40

标签: java javascript

我不确定这是否可行,但我正在努力寻找这种情况的前端解决方案:

我正在将JavaScript变量设置为动态标记,由后端Java代码填充:

var myString = '@myDynamicContent@';

但是,在某些情况下,输出中的内容包含回车符;打破了代码:

var mystring = '<div>
                Carriage Return happened above and below.
                </div>';

无论如何我可以在前端解决这个问题吗?或者在脚本中为它做些什么为时已晚,因为动态标记将在任何JavaScript运行之前运行(因此脚本被该点破坏)?

5 个答案:

答案 0 :(得分:1)

我确信我的JS可以被清理(只是认为这是一个有趣的问题),但你可以搜索JS中的注释。

让我们说你的JS看起来像这样(注意到我在评论中添加了一个标签,所以我们知道我们正在寻找正确的标签,并且只有一个div用于测试):

<script id="testScript">
/*<captureMe><div>
  Carriage Return happened above and below.
  </div>
*/
var foo = 'bar';
</script>
<div id='test'>What do I see:</div>

只需使用它来获取评论:

var something = $("#testScript").html();
var newSomething = '';
newSomething = something.substr(something.indexOf("/*<captureMe>")+13);
newSomething = newSomething.substr(0, newSomething.indexOf("*/"));
$('#test').append('<br>'+newSomething);  // just proving we captured the output, will not render returns or newline as expected by HTML

从技术上讲,它有效:),脚本脚本......

Charbs

答案 1 :(得分:1)

JavaScript通过在行尾添加反斜杠(\)来支持可跨越多行的字符串,例如:

var myString = 'foo\
bar';

因此,当您在服务器端变量中写入时,您应该能够进行Java替换:

var myString = '@myDynamicContent.replaceAll("\\n", "\\\\n")@';

答案 2 :(得分:0)

\n和/或\r分别替换为\\n和/或\\r ...但必须使用服务器端语言(在你的情况Java);它无法在JavaScript中完成。

答案 3 :(得分:0)

建立@Charbs的答案,如果您为脚本标记指定不同的mime类型,则可以避免使用JavaScript注释,因此浏览器不会尝试将其评估为JavaScript:

<script id="testScript" type="text/notjs" style="display:none">@myDynamicContent@</script>

然后就这样抓住它(使用jQuery):

var myString = $('#testScript').text();

答案 4 :(得分:0)

对我来说,看起来你正在做代币替换,而不是使用模板引擎。如果您喜欢令牌替换,您也可以Snippetory,因为它会创建类似的代码。但它有许多其他功能。使用

var myString = '{v:myDynamicContent enc="string"}'

会创建

var mystring = '<div>\r\n          Carriage Return happened above and below.\r\n                </div>'

从而解决您的问题。但你也必须改变你的代码。