使用 HAML 在段落内应用 class
Apply a class inside paragraph with HAML
我在使用 HAML 的 Rails 模板上遇到 Ruby 问题。
我不知道如何在标签内应用特定的 class,例如:
%p My name is John Doe
我想在 "name" 字词中添加 .highlight class。这该怎么做?我只知道这样:
%p
%span My
%span.highlight name
%span is John Doe
但这当然不是最好的方法,我希望如此。有什么想法吗?
无论如何,您必须将突出显示的文本放在它自己的元素中,所以您的代码非常接近。不过,您不需要将其余文本包装在元素中:
%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>
还有 precede
和 surround
方法,您可以在这里阅读: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_tag
来渲染 span.highlight
中的字符串。然后我们必须使用 capture_haml
将此输出捕获为字符串,因为我们在插值中使用它(通常 haml_tag
写入 Haml 缓冲区而不是返回字符串)。然后我们使用 strip!
因为 Haml 将在这之后呈现一个换行符,而你说你不想要那个。最后,我们使用 html_safe
告诉 Rails 不要转义输出,因为它会破坏我们的 <span>
并且我们已经转义了输入所以我们知道它是安全的。
现在您可以在插值 Ruby 中使用 hl
方法:
%p
What's your #{hl "name"}?
这将呈现:
<p>
What's your <span class='highlight'>name</span>?
</p>
我在使用 HAML 的 Rails 模板上遇到 Ruby 问题。
我不知道如何在标签内应用特定的 class,例如:
%p My name is John Doe
我想在 "name" 字词中添加 .highlight class。这该怎么做?我只知道这样:
%p
%span My
%span.highlight name
%span is John Doe
但这当然不是最好的方法,我希望如此。有什么想法吗?
无论如何,您必须将突出显示的文本放在它自己的元素中,所以您的代码非常接近。不过,您不需要将其余文本包装在元素中:
%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>
还有 precede
和 surround
方法,您可以在这里阅读: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_tag
来渲染 span.highlight
中的字符串。然后我们必须使用 capture_haml
将此输出捕获为字符串,因为我们在插值中使用它(通常 haml_tag
写入 Haml 缓冲区而不是返回字符串)。然后我们使用 strip!
因为 Haml 将在这之后呈现一个换行符,而你说你不想要那个。最后,我们使用 html_safe
告诉 Rails 不要转义输出,因为它会破坏我们的 <span>
并且我们已经转义了输入所以我们知道它是安全的。
现在您可以在插值 Ruby 中使用 hl
方法:
%p
What's your #{hl "name"}?
这将呈现:
<p>
What's your <span class='highlight'>name</span>?
</p>