我在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"); }
答案 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 quotes或escape_javascript
答案 2 :(得分:1)
使用html_escape
方法或ERB :: Util的同义词h()
。
答案 3 :(得分:0)
经过多次试验和错误后,我找到了解决方案,它并不像我希望的那样简单,但它有效,请参阅已编辑的问题以供回答。