如何从rails中的代码中删除一个新行(\ n)?

时间:2012-09-12 21:52:39

标签: javascript jquery ruby-on-rails ruby

我目前在我的视图中有以下代码(jQuery),当title有一个\ n字符时,它会破坏我的js。

$("#t").html("#{title.html_safe}");

以下是有效的,但我认为这有点像黑客:

$("#t").html("#{title.gsub("\n","")}");

4 个答案:

答案 0 :(得分:4)

您要查找的方法是String#chomp。它将从字符串末尾删除任何回车字符。

$("#t").html("#{title.chomp}");

与往常一样,如果您完全确定html_safe变量是安全的,请仅使用title ...特别是因为您在Javascript文件中使用它!我没有将它包含在我的代码示例中,因为我无法让自己去做。另外,请参阅APIdock关于在html_safe变量上使用nil的说明。我建议只在字符串文字中使用它。

编辑:

如果您的title可能包含在Javascript中使用之前需要转义的引号(例如'"Winter is Coming", I say',它将作为.html(""Winter is Coming", I say");插入到您的javascript中),那么您也应该使用链接中建议的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的第二个参数中添加了一个空格,因此'Winter\nis\nComing'将变为'Winter is Coming'而不是'WinterisComing'

答案 1 :(得分:1)

我不确定你是否会减少hacky

如果您仍想要换行,可以使用simple_format

即。 $(“#t”)。html(“#{simple_format title}”);

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

虽然它也包含在<p>标签中。

答案 2 :(得分:0)

你可以尝试:

$("#t").html("#{title.html_safe}".chomp);

或更短:

$("#t").html(title.html_safe.chomp);

这会删除尾随换行符。

如果您要删除前导和尾随空格,可以将chomp替换为strip

如果您的文字在字符串中有换行符,则gsub解决方案似乎是正确的解决方案,但您不需要#{...}

$("#t").html(title.gsub("\n",""));

答案 3 :(得分:0)

这么多错误的答案。使用escape_javascript