【问题标题】:What is the best way to have long string literals in Javascript? [duplicate]在 Javascript 中使用长字符串文字的最佳方法是什么? [复制]
【发布时间】:2010-10-28 03:24:58
【问题描述】:

可能重复:
Multiline strings in Javascript

在 Ruby 中,您可以执行以下操作:

temp = <<-SQLCODE
  select * from users
SQLCODE

这样你的代码中就有很长的字符串文字,而不必转义很多字符。 JavaScript中有类似的东西吗?

目前我有这样的 JavaScript 代码,它让我发疯......

  new Element.update(lightbox_id, " \
    <div id='overlay' class='overlay' > \
    </div> \
    <div id='lightbox' class='lightbox'> \
      <div class='lightbox_title'> \
        <div class='corner_image' onclick=\"close_lightbox();return false;\"><a href='#'>" + corner_image + "</a></div> \
        <div class='lightboxname' id='lightboxname'>" + title + "</div> \
        <div class='close_image'> \
          <a href='#' onclick=\"close_lightbox();return false;\">Close</a> or Escape key\
        </div> \
      </div> \
      <div id='" + lightbox_content_id + "' class='lightbox_content'>    \
      </div> \
      <script>  \
        watch_for_escape(); \
      </script> \
    </div> \
");

【问题讨论】:

标签: javascript ruby-on-rails ruby heredoc


【解决方案1】:

您所指的语法通常称为here-document (or HEREDOC),不,它在 Javascript 中不可用。

像您一直在做的那样添加反斜杠是在 JavaScript 中跨越多行字符串的适当方法。

【讨论】:

    【解决方案2】:

    像这样使用 html 内联是不好的做法,但如果你真的想更简洁地处理它,试试这个:

    在您的页面上放置一个隐藏的 div,使用您想要的 html,并将自定义参数替换为 {title} 之类的内容。调用更新时,传递 yourdiv.innerHTML.replace(...

    【讨论】:

    • 这种方法的问题在于它很难将功能封装在单个 Javascript 文件中 - 例如,编写一个需要将特定内容插入 DOM 的插件。
    【解决方案3】:

    如果您使用的是 Rails,那么使用 rjs 用一些多行 HTML 更新 div 会变得更加简洁:

    page.replace__html 'lightbox_id', :partial => 'overlay'
    

    然后overlay.html.erb 将包含上面的原始 html 而不会转义。

    额外的好处是片段“覆盖”也可以在初始页面加载中使用,这在很多情况下是您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多