【问题标题】:Apply a class inside paragraph with HAML使用 HAML 在段落内应用类
【发布时间】:2015-08-09 17:51:18
【问题描述】:

我在使用 HAML 的 Ruby on Rails 模板时遇到了问题。

我不知道如何在标签中应用特定的类,例如:

%p My name is John Doe

我想为“name”字添加一个 .highlight 类。这个怎么做?我只知道这样:

%p
    %span My
    %span.highlight name
    %span is John Doe

但这当然不是最好的方法,我希望如此。有什么想法吗?

【问题讨论】:

  • 您已将类添加到span,现在使用CSS,您可以将样式应用于包含在span 标签内的文本..

标签: ruby-on-rails ruby haml


【解决方案1】:

无论如何,您必须将突出显示的文本放在它自己的元素中,这样您的代码就非常接近了。不过,您不需要将其余文本包装在元素中:

%p
  My
  %span.highlight name
  is John Doe

这将产生:

<p>
  My
  <span class="highlight">name</span>
  is John Doe
</p>

编辑:

问号的情况,可以使用Haml的succeed辅助方法:

%p
  = succeed "?" do
    What's your
    %span.highlight name

这将呈现:

<p>
  What's your
  <span class='highlight'>name</span>?
</p>

还有precedesurround 方法,您可以在此处阅读:http://haml.info/docs/yardoc/file.REFERENCE.html#helper-methods

如果您更愿意使用字符串插值,定义您自己的辅助方法可能是最简单的方法。

def hl(str)
  capture_haml {
    haml_tag 'span.highlight', escape_once(str)
  }.strip!.html_safe
end

由于这有点复杂,让我从内到外分解它。首先,我们需要使用escape_once 对字符串进行转义。仅当 str 来自用户输入时才需要这样做(因此可能导致 XSS 攻击),但无论如何都有它是好的。然后我们使用haml_tagspan.highlight 中渲染字符串。然后我们必须使用capture_haml 将此输出捕获为字符串,因为我们在插值中使用它(通常haml_tag 写入Haml 缓冲区而不是返回字符串)。然后我们使用strip!,因为Haml 将在此之后呈现一个换行符,而你说你不想要那个。最后,我们使用html_safe 告诉Rails 不要转义输出,因为它会破坏我们的&lt;span&gt;,而且我们已经转义了输入,所以我们知道它是安全的。

现在您可以在插值的 Ruby 中使用 hl 方法:

%p
  What's your #{hl "name"}?

这将呈现:

<p>
  What's your <span class='highlight'>name</span>?
</p>

【讨论】:

  • 是的,然后应用 CSS 给它一种懒惰的感觉。
  • 我认为有一种方法可以做到这一点,比如 #{...} 或者可能没有?乔丹,你的答案当然有效,但它会自动在这些部分之间添加一个空格。同时,如果其中之一是“?”我想避免在它前面留一个空格。
  • 好点,@MateuszKwaśniak。我已经用几种方法更新了我的答案来解决您的问题。
  • 哦,先生,我仍在寻找答案,实际上找到了答案,刷新了这个问题,这也是您的更新。另一个答案是 %span&gt; ? 删除问号前的空格。但是谢谢,现在我知道了先行/成功,这 #{...} 事情是插值 - 是的,我忘记了,谢谢!
  • %span&gt; ? 可以使用,但会将您的问号包含在&lt;span&gt; 中。更成问题的是它还会删除问号 之后的空格,所以如果它后面跟着另一个句子,你就会遇到同样的问题。
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多