2

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

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

以下工作,但我认为这有点黑客:

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

4 回答 4

4

您正在寻找的方法是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'

于 2012-09-12T22:14:20.230 回答
1

我不确定你是否会减少hacky

如果你仍然想有新的线路,你可以使用simple_format

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

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

尽管这也将其包装在<p>标签中。

于 2012-09-12T22:05:47.580 回答
0

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

于 2012-09-13T00:43:30.697 回答
0

你可以试试:

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

或更短:

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

这将删除尾随换行符。

如果要删除前导和尾随空格,可以替换chompstrip.

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

$("#t").html(title.gsub("\n",""));
于 2012-09-12T22:06:20.923 回答