2011-11-11 15 views
2

我做一個jQuery的的jQuery的insertBefore和單引號的問題

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

On Rails的一面,create.erb.js

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

此代碼工作得很好,直到輸出insertBefore包含'它打破了HTML渲染。本質上,返回的字符串包含這樣的

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

我on Rails的3.0.x和試圖在兩條軌道和Javascript並沒有什麼作品逃避轉義的各種組合,任何建議?我可以將'更改爲",但這只是將問題轉移到另一個會破壞的角色。

編輯 好吧,這是方式更復雜,不過我想我發現了許多試驗和錯誤

On Rails的側面後的解決方案,create.erb.js

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

jQuery的

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

你逃脫了只有一個符號,但有另一個符號,這裏不能保證你不會遇到它們 – megas

+0

是的我測試了,但沒有其他特殊字符似乎有問題,只是單引號。 – Bob

回答

0

經過多次試驗和錯誤,我找到了解決方案,它不像我希望的那麼簡單,但它的工作原理,請參閱編輯問題的答案。

1

既然你想在元素之前放置HTML。它的舉動很明顯的使用方法:

$(element).before(YOUR HTML); 

或者,也許一個更好的解決辦法應該是:

$(element).html(YOUR HTML) 

並把跨度用ID來保存你的HTML。

+0

我似乎回憶起在文本框中使用'before'前出現的一些問題 – Bob

1

使用反斜線逃避像這樣

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

編輯:

也許你應該檢查這些鏈接:Let unescape_js handle escaped single quotesescape_javascript

+0

感謝您的建議,但它不起作用 – Bob

+0

@Bob您確定沒有其他錯誤,因爲我環顧四周,這是每個人都給的建議 –

+0

@Bob你甚至可以看看這個鏈接http://www.w3schools.com/js/js_special_characters.asp –

1

使用html_escape方法或它的同義詞h()從ERB ::的Util。

+0

感謝您的建議,但它沒有奏效 – Bob