2012-08-03 34 views
0

我不知道這是可能的,但我試圖找到一個前端解決方案,以這樣的情況:Java:Carriage返回在js代碼中填充var變量?

我一個JavaScript變量設置爲動態標籤,通過後端Java代碼填充:

var myString = '@[email protected]'; 

但是,有些情況下,輸出中的內容包含回車;這打破了代碼:

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

有無論如何我可以在前端解決這個問題嗎?或者在腳本中做些什麼太遲了,因爲動態標記將在任何JavaScript運行之前運行(因此腳本被該點破壞)?

+2

是的,它爲時已晚。您需要在動態代碼中處理此服務器。 (請給我們關於該Java代碼的更多信息) – Bergi 2012-08-03 15:02:42

+1

@Bergi你能不能從myString中去掉回車?例如'myString.replace(/ [\ n \ r]/g,'');' – 2012-08-03 15:03:46

+0

這裏有一個想法:如果我填充一個JS註釋/ * @myDynamicContent */- 我能夠用JS讀取那些內容? – brandtrock 2012-08-03 15:04:49

回答

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

+0

我應該注意到:我認爲你可以將動態內容打印到評論欄中......並且我使用了一些jQuery(這些日子不用說) – Charbs 2012-08-03 15:51:04

0

更換\n和/或\r分別\\n和/或\\r ......但它在服務器端語言來完成(在你的情況下,Java的);它不能在JavaScript中完成。

1

JavaScript的支持可以通過將一個反斜槓(\)在該行的結尾,例如跨越多行字符串:

var myString = 'foo\ 
bar'; 

所以,你應該能夠做到,當你在你的服務器編寫Java取代側的變量:

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

大廈關閉的@Charbs的回答,您可以避開JavaScript的意見,如果你給你的腳本標記不同的MIME類型,這樣瀏覽器就不會嘗試將其評價爲JavaScript的:

<script id="testScript" type="text/notjs" style="display:none">@[email protected]</script> 

然後就是抓住它,像這樣(使用jQuery):

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

對我來說,它看起來像你這樣做的令牌進行替換,而不是使用一個模板引擎。如果您喜歡代幣替換,您也可以使用Snippetory,因爲它會創建類似的代碼。然而它有一些額外的功能。使用

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

將創造

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

並由此解決您的問題。但是你也必須改變你的代碼。