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