我目前在我的视图中有以下代码(jQuery),当标题有一个 \n 字符时,它会破坏我的 js。
$("#t").html("#{title.html_safe}");
以下工作,但我认为这有点黑客:
$("#t").html("#{title.gsub("\n","")}");
我目前在我的视图中有以下代码(jQuery),当标题有一个 \n 字符时,它会破坏我的 js。
$("#t").html("#{title.html_safe}");
以下工作,但我认为这有点黑客:
$("#t").html("#{title.gsub("\n","")}");
您正在寻找的方法是String#chomp。它将删除字符串末尾的所有回车字符。
$("#t").html("#{title.chomp}");
与往常一样,只有html_safe
在您完全确定title
变量是安全的情况下才使用...尤其是当您在 Javascript 文件中使用它时!我没有将它包含在我的代码示例中,因为我无法让自己去做。另外,请参阅APIdock上关于使用html_safe
可能是nil
. 我建议只在字符串文字上使用它。
编辑:
如果您title
可能包含在 Javascript 中使用之前需要转义的引号(例如'"Winter is Coming", I say'
,它将插入到您的 javascript 中.html(""Winter is Coming", I say");
),那么您还应该使用escape_javascript
链接中建议的方法 @mu 提供的太短。
$("#t").html("#{j(title.chomp)}");
如果title = '"Winter is Coming"'
那么上面的代码就会产生。
$("#t").html("\"Winter is Coming\"");
如果还有可能在标题字符串的中间有一个回车,那么String#gsub
就是要走的路。
$("#t").html("#{j(title.gsub(/[\n\r]/, " "))}");
gsub
我在so 'Winter\nis\nComing'
will become 'Winter is Coming'
and not的第二个参数中放了一个空格'WinterisComing'
。
我不确定你是否会减少hacky
如果你仍然想有新的线路,你可以使用simple_format
即 $("#t").html("#{simple_format title}");
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
尽管这也将其包装在<p>
标签中。
这么多错误的答案。使用escape_javascript。
你可以试试:
$("#t").html("#{title.html_safe}".chomp);
或更短:
$("#t").html(title.html_safe.chomp);
这将删除尾随换行符。
如果要删除前导和尾随空格,可以替换chomp
为strip
.
如果您的文本在字符串中有换行符,则gsub
解决方案似乎是正确的解决方案,但您不需要#{...}
:
$("#t").html(title.gsub("\n",""));