2011-11-11 10 views
2

私がやっているがinsertBefore jQueryのこのコードが出力されるまでだけで正常に動作create.erb.jsのjQueryのinsertBeforeと単一引用符問題

'<div style="background-color:yellow;"><%= show_content %></div>' 

Railsの側では

$.post('/blah', { blah : "some data" }, function(response) { 
    $(response).insertBefore($this); $this.val(''); }, "script"); } 

、中にHTMLを壊し'が含まれていますレンダリング。基本的に返される文字列は、この

'<div ...>It's a beautiful day</div>' 

のようなものが含まれている私は、任意の提案のRails 3.0.xの上だとRailsとJavaScriptの両方にアンエスケープをエスケープの様々な組み合わせを試してみましたが、何も動作していますか?私は'"に変更することができますが、それは問題を壊す別の文字にシフトするだけです。 [OK]を

EDIT 、これはjQueryの

$.post('/blah', { blah : "some data" }, function(response) { 
    $(unescape(response)).insertBefore($this); $this.val(''); }, "script"); } 
create.erb.js

'<div style="background-color:yellow;"><%= raw(show_content.gsub(/'/, "%27")) %></div>' 

、私は思ったが、私はRailsの側では、多くの試行錯誤

後に解決策を発見する方法がより複雑です

+0

あなたは1つのシンボルだけをエスケープしましたが、別のシンボルがあります。それらに遭遇しないという保証はありません。 – megas

+0

はい、私はそれをテストしましたが、他の特殊文字は問題ありません。 – Bob

答えて

0

多くの試行錯誤の末、私は解決策を見つけました。私が望むほど単純ではありませんが、それはうまくいきます。

1

要素の前にHTMLを配置したいからです。

$(element).before(YOUR HTML); 

それとも、より良い解決策は次のようになります:

$(element).html(YOUR HTML) 

そして、あなたのHTMLを保持するためのIDとスパンを置くことは、使用することを明らかに移動します。

+0

私はテキストボックスで 'before'を使うといくつかの問題を思い出しているようです。 – Bob

1

この

'<div ...>It\'s a beautiful day</div>' 

編集のようにそれをエスケープするには、バックスラッシュを使用します。

たぶん、あなたはこれらのリンクをチェックアウトする必要があります:Let unescape_js handle escaped single quotesまたはescape_javascript

+0

提案してくれてありがとうございましたが、うまくいきませんでした。 – Bob

+0

@Bob誰かが見ているので、 –

+0

@Bobこのリンクをチェックアウトすることもできます。http://www.w3schools.com/js/js_special_characters.asp –

1

使用html_escape方法またはそれの同義語h()からERB :: Util。

+0

提案してくれてありがとうが、うまくいきませんでした – Bob

関連する問題