javascript - 将存储在 Ruby 变量中的 HTML block 存储在 javascript var 中

标签 javascript html ruby-on-rails

我有一个 ruby​​ 变量,上面存储了一段 html 代码,例如:

<html>
 <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>
 <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'">
  <div style="text-align:center">
    <div style="font-size:24px; font-family:'Times New Roman'">Jorge</div>
    <div style="font-size:15px; font-family:'Times New Roman'">Constanza</div>
  </div>
  </body>
</html>

所以,我在 ruby​​ 中有一个名为 html 的变量它存储了它......(实际上它在行尾有\n\r ),我需要将此 ruby​​ 变量传递给 javascript var。所以在我的 template.html.erb 中我有以下内容:

<%= javascript_tag do %>
  var previewHtml = "<%=html%>";
<% end %>

但这不起作用,因为我的 html 文件中呈现了以下内容:

var previewHtml = "<html>
 <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>
 <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'">
  <div style="text-align:center">
    <div style="font-size:24px; font-family:'Times New Roman'">First Name</div>
    <div style="font-size:15px; font-family:'Times New Roman'">Last Name</div>
  </div>
  </body>
</html>";

我在 Firefox 中遇到以下错误:SyntaxError: unterminated string literal var previewHtml = "<html> 。这是有道理的......而且我不知道将这段 HTML 发送到 js。我需要稍后将其插入 iFrame 中。

我已经尝试执行以下操作:

<%= javascript_tag do %>
  var previewHtml = "<%= @feed_template.html_template.gsub(/\r?\n/, '').html_safe %>";
<% end %>

呈现以下内容:

var previewHtml = "<html>  <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>  <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'"> <div style="text-align:center"> <div style="font-size:24px; font-family:'Times New Roman'">Jorge</div> <div style="font-size:15px; font-family:'Times New Roman'">Constanza</div> </div> </body> </html>";

我得到了 SyntaxError: missing ; before statement ...

有什么帮助吗?

最佳答案

您也可以使用 escape_javascript 帮助程序,它的别名为 j:

<%= javascript_tag do %>
  var previewHtml = "<%= escape_javascript html %>";
<% end %>

或更短:

<%= javascript_tag do %>
  var previewHtml = "<%= j html %>";
<% end %>

这会将所有特殊的 Javascript 字符替换为其匹配的转义序列,尤其是引号,这似乎给您带来了最大的麻烦。

渲染结果应如下所示:(注意反斜杠!)

var previewHtml = "<html>\n<head><meta http-equiv=\"Content-Type\"  ... "

关于javascript - 将存储在 Ruby 变量中的 HTML block 存储在 javascript var 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25632228/

相关文章:

javascript - 使用子字符串方法突出显示字符串中的文本

javascript - 如何更改 Koa 的非定义路由的 http 状态码

javascript - 如何在不使用脚本标签的情况下注入(inject) javascript?

javascript - 在鼠标悬停时删除另一个 DOM 对象中第 n 个元素的类

ruby-on-rails - Rails has_one 到 has_many 不工作

javascript - 与有 Angular 物体比较

html - XHTML 1.0 严格 - div 对齐 ="center"仍然有效吗?

html - 标签中第一个标签的样式

ruby-on-rails - capybara :未定义的方法 'visit'

ruby-on-rails - Rails 父类(super class)不匹配错误与两个 Controller