我不确定这是否可行,但我正在努力寻找这种情况的前端解决方案:
我正在将JavaScript变量设置为动态标记,由后端Java代码填充:
var myString = '@myDynamicContent@';
但是,在某些情况下,输出中的内容包含回车符;打破了代码:
var mystring = '<div>
Carriage Return happened above and below.
</div>';
无论如何我可以在前端解决这个问题吗?或者在脚本中为它做些什么为时已晚,因为动态标记将在任何JavaScript运行之前运行(因此脚本被该点破坏)?
答案 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>'
从而解决您的问题。但你也必须改变你的代码。