2011-05-25 49 views
2

比方說,我有一個文本塊,看起來像這樣:如何使用HAML格式化包含換行符的文本塊?

First line\nSecond line\nThird line 

我想利用這個文本並顯示它(使用jQuery的模板)在HAML這樣的:

%li ${TEXT} 

不幸,我還沒有找到任何好的方法讓這些換行符實際上顯示換行符。當原樣顯示,他們最終被格式化(實際網頁上)這樣的:

First line Second line Third line 

在做在JavaScript中的標準replace(/\n/g, "<br />"),格式化的結果(後HAML)變爲:

First line<br />Second line<br />Third line 

換句話說,文字字符串<br />實際上向用戶顯示

我確定這個問題有一個簡單的解決方案;我只是沒有很快找到它。

回答

0

你必須逃逸(\\n

replace(/\n/g, "\\n") 
+0

很抱歉,如果我不清晰;我想讓用戶看到的格式化輸出實際上有*換行*,不僅僅是空格,而不是換行序列「\ n」,而不是字符串「
'」。所以基本上我想讓HAML爲我插入實際的'
'元素,或者讓它允許* me *在傳遞給它的文本中插入'
'元素。那有意義嗎? (我試過這個答案,結果是用戶實際上看到了「\ n」)。如果你想輸出
,你可以在你的haml視圖中使用 – 2011-05-25 23:05:22

+0

,使用'%br /'中斷。你可能需要使用一些內聯ruby(或使用助手)將數據中的'\ n'替換爲'%br'當然我不知道HAML將如何處理它,因爲它對每個元素的縮進都有點挑剔。 – colinross 2011-05-25 23:12:05

1

像這樣的東西加倍逃脫\n

- lines = text.split("\n") 
- unless lines.empty? 
    %ul 
    - lines.each do |line| 
     %li= line 
     - unless lines.last == line 
     %br 

毫無疑問,它可以改善。

3

使用jQuery模板,而不是使用TEXT屬性包含html的$ {TEXT},您應該使用{{html TEXT}}。這將阻止jQuery模板引擎在將html插入到模板之前編碼您的string.replace(/ \ n/g,「
」)。

0

this answer改進形式:

- text = "Hello \nWorld" 
%p= find_and_preserve text.split("\n").join('<br>') 

(雖然這個問題似乎更多$.text VS S.html,如上所述here

相關問題