Html “正在结束轨道haml跨度”;早期的为什么?

Html “正在结束轨道haml跨度”;早期的为什么?,html,ruby-on-rails,ruby,haml,Html,Ruby On Rails,Ruby,Haml,为什么我的“页脚链接”会提前结束(在我的删除按钮之前): %p %br %span.footer_links = link_to 'Edit', edit_link_path(@link) | = button_to 'Delete', @link, :confirm => 'Are you sure?', :method => :delete 正在制作以下内容: <p> <br/> <span class="foote

为什么我的“页脚链接”会提前结束(在我的删除按钮之前):

%p
  %br
  %span.footer_links
    = link_to 'Edit', edit_link_path(@link)
    |
    = button_to 'Delete', @link, :confirm => 'Are you sure?', :method => :delete
正在制作以下内容:

<p>
<br/>
<span class="footer_links">
<a href="/links/354/edit">
<a href="/links/354/edit">
 | 
</span>
</p>
<form method="post" action="/links/354" class="button_to">
<div>
<input name="_method" type="hidden" value="delete"/>
<input data-confirm="Are you sure?" type="submit" value="Delete"/>
<input name="authenticity_token" type="hidden" value="MvN6K03y5WcqSZRt4Au3zj+xsKhfZ9EEtkf2M7YCGhk="/>
</div>
</form>


|


完全是猜测,但缩进中是否混合了空格和制表符?看起来HAML将Butto标记解释为与%p标记在同一级别缩进,因此我想知道是否有选项卡可能被解释为空格


HAML文档说你不能在缩进中混合制表符和空格,但没有说明这是否会引发错误或显示为意外行为。

完全是猜测,但是你在缩进中混合了空格和制表符吗?看起来HAML将Butto标记解释为与%p标记在同一级别缩进,因此我想知道是否有选项卡可能被解释为空格


HAML文档说明不能在缩进中混合制表符和空格,但没有说明这是否会引发错误或显示为意外行为。

我猜您的HAML实际上产生了如下结果:

<p>
  <br/>
  <span class="footer_links">
    <a href="/links/354/edit">...</a>
     | 
    <form method="post" action="/links/354" class="button_to">
      <div>
        <input name="_method" type="hidden" value="delete"/>
        <input data-confirm="Are you sure?" type="submit" value="Delete"/>
        <input name="authenticity_token" type="hidden" value="MvN6K03y5WcqSZRt4Au3zj+xsKhfZ9EEtkf2M7YCGhk="/>
      </div>
    </form>
  </span>
</p>
<p>...</p>
<form><div>...</div></form>


|

但这不是有效的HTML:。因此,当浏览器试图解析HTML时,它会注意到它不是有效的HTML,并尽力更正您的HTML。最简单的纠正方法是将有问题的
元素推到
之外,并在此过程中关闭
元素,这将产生如下(有效的HTML)结构:

<p>
  <br/>
  <span class="footer_links">
    <a href="/links/354/edit">...</a>
     | 
    <form method="post" action="/links/354" class="button_to">
      <div>
        <input name="_method" type="hidden" value="delete"/>
        <input data-confirm="Are you sure?" type="submit" value="Delete"/>
        <input name="authenticity_token" type="hidden" value="MvN6K03y5WcqSZRt4Au3zj+xsKhfZ9EEtkf2M7YCGhk="/>
      </div>
    </form>
  </span>
</p>
<p>...</p>
<form><div>...</div></form>

...
这看起来和你看到的很像


解决方案是使用有效的HTML,也许您可以使用
而不是最外层的
,并调整CSS以使
div.p
看起来像
p
。您还必须替换
,因为就像
一样,我猜您的HAML实际上产生了如下内容:

<p>
  <br/>
  <span class="footer_links">
    <a href="/links/354/edit">...</a>
     | 
    <form method="post" action="/links/354" class="button_to">
      <div>
        <input name="_method" type="hidden" value="delete"/>
        <input data-confirm="Are you sure?" type="submit" value="Delete"/>
        <input name="authenticity_token" type="hidden" value="MvN6K03y5WcqSZRt4Au3zj+xsKhfZ9EEtkf2M7YCGhk="/>
      </div>
    </form>
  </span>
</p>
<p>...</p>
<form><div>...</div></form>


|

但这不是有效的HTML:。因此,当浏览器试图解析HTML时,它会注意到它不是有效的HTML,并尽力更正您的HTML。最简单的纠正方法是将有问题的
元素推到
之外,并在此过程中关闭
元素,这将产生如下(有效的HTML)结构:

<p>
  <br/>
  <span class="footer_links">
    <a href="/links/354/edit">...</a>
     | 
    <form method="post" action="/links/354" class="button_to">
      <div>
        <input name="_method" type="hidden" value="delete"/>
        <input data-confirm="Are you sure?" type="submit" value="Delete"/>
        <input name="authenticity_token" type="hidden" value="MvN6K03y5WcqSZRt4Au3zj+xsKhfZ9EEtkf2M7YCGhk="/>
      </div>
    </form>
  </span>
</p>
<p>...</p>
<form><div>...</div></form>

...
这看起来和你看到的很像

解决方案是使用有效的HTML,也许您可以使用
而不是最外层的
,并调整CSS以使
div.p
看起来像
p
。您还必须替换
,因为就像

以“mu太短”作为答案一样,将
p
span
元素更改为
div
(或其他有效的HTML):

我猜你是从Chrome(或Safari或Firefox/Firebug)开发工具中的Elements(又称DOM)浏览器中得到这个“源代码”的。这与查看HAML渲染的原始源代码不同。浏览器解析您的(无效)源代码,并尝试从中构建最佳的DOM,当您浏览DOM时,开发人员控制台会将其作为文本转储

开发人员控制台中的文本表示很少与原始源代码相同,尤其是在源代码无效的情况下。当您试图调试渲染错误时,不要盯着这么多层薄纱。从浏览器菜单中选择“查看源代码”。

根据“mu太短”的答案,将
p
span
元素更改为
div
(或其他有效的HTML):

我猜你是从Chrome(或Safari或Firefox/Firebug)开发工具中的Elements(又称DOM)浏览器中得到这个“源代码”的。这与查看HAML渲染的原始源代码不同。浏览器解析您的(无效)源代码,并尝试从中构建最佳的DOM,当您浏览DOM时,开发人员控制台会将其作为文本转储


开发人员控制台中的文本表示很少与原始源代码相同,尤其是在源代码无效的情况下。当您试图调试渲染错误时,不要盯着这么多层薄纱。从浏览器菜单中选择“查看源”。

为什么有两个编辑链接?只是为了显示中断发生的时间。您是如何查看此源的?您是在查看原始源代码还是在使用开发人员工具查看DOM?他们不一样。如果你看的是DOM,那么mu的答案太短是正确的。你能展示你的整个haml吗?我不久前也遇到过同样的问题,它是haml中的一个bug。您是否使用最新版本?为什么有两个编辑链接?仅用于显示中断发生的时间您是如何查看此源的?您是在查看原始源代码还是在使用开发人员工具查看DOM?他们不一样。如果你看的是DOM,那么mu的答案太短是正确的。你能展示你的整个haml吗?我不久前也遇到过同样的问题,它是haml中的一个bug。您使用的是最新版本吗?谢谢,但问题似乎是页脚链接span提前结束,我已经检查了选项卡(否),所以我不知道为什么。@MichaelCurrent:必须关闭
,以便将
推出
,然后必须关闭
,以便将
推出
。浏览器不允许您将
放在
中,因为
不是一个短语元素。谢谢。但问题似乎在于页脚链接跨度提前结束且