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_safenil

編集:

Javascriptで使用する前にエスケープする必要のある引用符が含まれている可能性があるtitle場合(たとえば'"Winter is Coming", I say'、JavaScriptに補間する) 、リンク@muで提案されている方法.html(""Winter is Coming", I say");も使用する必要があります。escape_javascript

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

その場合title = '"Winter is Coming"'、上記のコードが生成されます。

$("#t").html("\"Winter is Coming\"");

タイトル文字列の途中でキャリッジリターンが発生する可能性もある場合は、それString#gsubが最適な方法です。

$("#t").html("#{j(title.gsub(/[\n\r]/, " "))}");

の2番目のパラメータにスペースをgsub入れ'Winter\nis\nComing'ます。'Winter is Coming''WinterisComing'

于 2012-09-12T22:14:20.230 に答える
1

あなたがハッキーを減らすつもりかどうかはわかりません

それでも新しい行が必要な場合は、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

あなたは試すことができます:

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

以下:

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

これにより、末尾の改行が削除されます。

先頭と末尾のスペースを削除する場合は、に置き換えることができchompますstrip

テキストの文字列内に改行がある場合、解決策は正しい解決策のようですが、 :gsubは必要ありません。#{...}

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

非常に多くの間違った答え。escape_javascriptを使用します。

于 2012-09-13T00:43:30.697 に答える