jQuery insertBefore和单引号问题

时间:2011-11-11 22:32:49

标签: jquery ruby-on-rails ruby-on-rails-3

我在jQuery中做insertBefore

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

在Rails一侧,create.erb.js

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

此代码可以正常工作,直到输出包含打破HTML呈现的'。本质上,返回字符串包含类似

的内容
'<div ...>It's a beautiful day</div>'

我在Rails 3.0.x上尝试过在Rails和Javascript上转义unescaping的各种组合,没有任何作用,有什么建议吗?我可以将'更改为",但这只会将问题转移到另一个会破坏的角色。

修改 好吧,这比我想象的要复杂得多,但经过多次试验和错误后我找到了一个解决方案

在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"); }

4 个答案:

答案 0 :(得分:1)

因为你想在一个元素之前放置HTML。使用起来很明显:

$(element).before( YOUR HTML );

或许更好的解决方案应该是:

$(element).html( YOUR HTML)

并添加带有ID的范围来保存您的HTML。

答案 1 :(得分:1)

使用反斜杠来逃避它

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

修改

也许您应该查看以下链接:Let unescape_js handle escaped single quotesescape_javascript

答案 2 :(得分:1)

使用html_escape方法或ERB :: Util的同义词h()

答案 3 :(得分:0)

经过多次试验和错误后,我找到了解决方案,它并不像我希望的那样简单,但它有效,请参阅已编辑的问题以供回答。