0

我不确定这是否可能,但我正在尝试为这种情况找到一个前端解决方案:

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

var myString = '@myDynamicContent@';

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

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

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

4

5 回答 5

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

从技术上讲,它可以工作:),脚本脚本......

炭火

于 2012-08-03T15:42:15.443 回答
1

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

var myString = 'foo\
bar';

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

var myString = '@myDynamicContent.replaceAll("\\n", "\\\\n")@';
于 2012-08-03T16:08:54.217 回答
0

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

于 2012-08-03T15:04:08.090 回答
0

根据@Charbs 的回答,如果您为脚本标签提供不同的 mime 类型,则可以避免 JavaScript 注释,因此浏览器不会尝试将其评估为 JavaScript:

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

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

var myString = $('#testScript').text();
于 2012-08-03T17:29:56.887 回答
0

对我来说,您似乎在进行令牌替换而不是使用模板引擎。如果你喜欢令牌替换,你也可以使用 Snippetory,因为它会创建类似的代码。但是,它具有许多附加功能。使用

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

会创造

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

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

于 2012-08-03T20:57:02.893 回答