【问题标题】:Conditional HTML Attribute using Rails ERB使用 Rails ERB 的条件 HTML 属性
【发布时间】:2021-03-25 17:37:17
【问题描述】:

我见过一些类似的问题,但没有一个似乎可以概括我的情况。

对于某些标签,我必须使用与 Ruby 混合的 HTML。我找到了两种方法。

方法A

<input id="<%= id %>" />

这在大多数情况下都可以正常工作,但是,如果 id 是空字符串或 nil,那么它仍然会像这样返回 HTML:

<input id />

问题:如果变量是空字符串或 nil,我宁愿完全排除“id”标签。

方法B

<input <%= "id=#{id}" unless id.blank? %> />

如果 id 是空字符串,它将返回所需的结果

<input />

问题:但是,如果 id 有多个空格,则会导致问题(这与“值”之类的标签更相关)。例如,如果 'id' 是“lorem ispum dolor sit amet”,它将输出:

<input id="lorem" ipsum dolor sit amet />

有没有人有更好的方法来有条件地包含 HTML 属性?请注意,我知道我可以使用像 text_field_tag 这样的 Rails HTML 帮助程序,但我想找到一个不使用它们的解决方案。

编辑:我计划使用多个 HTML 属性(例如

【问题讨论】:

    标签: html ruby-on-rails attributes conditional-statements erb


    【解决方案1】:

    您可以使用条件的完整结构:

    <% unless id.blank? %>
      <input id="<%= id %>" />
    <% else %>
      <input />
    <% end %>
    

    【讨论】:

    • 我已经编辑了这个问题,以表明我打算使用多个属性来执行此操作 - 因此对于这样的事情,它可能最终会成为太多的链接条件。
    【解决方案2】:

    主要有两个问题

    问题 1:HTML 属性值必须用引号括起来

    当id等于lorem" ipsum dolor sit amet时,这个ERB sn-p

    <input <%= "id=#{id}" unless id.blank? %> />
    

    生成此 HTML。

    <input id=lorem ipsum dolor sit amet />
    

    在 HTML5 中,引号是可选的,除非属性值包含空格,因此只有第一个单词是 id。我们可以通过引用属性来解决这个问题。我在这里使用字符串文字%() 语法,这样我们就不必转义双引号。

    <input <%= %(id="#{id}") unless id.blank? %> />
    

    这会输出我们想要的 id。

    <input id="lorem ipsum dolor sit amet" />
    

    问题 2:id 属性不能包含空格

    Per MDN,

    id 的值不能包含空格(空格、制表符等)。浏览器将包含空格的不合格 ID 视为空格是 ID 的一部分。

    这种事情通常可以完全正常工作,直到出现边缘情况而突然不出现。浏览器做了很多工作来确保无效的 HTML 仍然呈现,但从长远来看,我们可以通过遵守规范让事情变得更容易。 ?

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2011-12-25
      • 2016-04-29
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多