将link_to嵌套在另一个link_to

时间:2018-08-08 15:19:37

标签: html ruby-on-rails ruby erb

我需要像这样将“ a”元素嵌套在另一个“ a”元素中:

<a href="www.example.com" class="so-and-so">
    <span>something</span>
    <a href="www.another.example.com" class="another-link"><i class="an-icon"></a>
</a>

但是,我需要使用rails'link_to'帮助器而不是纯HTML。但是当我尝试像这样嵌套link_to帮助器时:

<%= link_to "www.example.com", class: "so-and-so" do %>
    <%= content_tag :span, "something" %>
    <%= link_to "www.another.example.com", class: "another-link" do %>
        <%= content_tag :i, class: "an-icon" %>
    <% end %>
<% end %>

它输出的HTML更像这样:

<a ...>
    <span ...>
</a>
<a class="another-link" ...>...</a>

任何帮助将不胜感激。谢谢!

编辑

事实证明,rails毕竟输出的是正确的html,但浏览器无法正确解释它。链接内是否可能有链接?

已解决(ISH)

事实证明,嵌套<a>元素不是有效的HTML,因此浏览器只是试图“更正”我的代码。我最终只是将一个元素放置在另一个元素之外,并使用CSS使其看起来相同。

2 个答案:

答案 0 :(得分:0)

因为您需要内部link标记点指向控制器上的destroy动作。您可以通过第一个链接的click事件触发操作。

  $('#first_link').on('click', function() {
          $.ajax({
            type: "DELETE", 
            url: YOUR_SECOND_LINK ,
            data: {id: YOUR_ID },
            success: function(data, textStatus, jqXHR){...},
            error: function(jqXHR, textStatus, errorThrown){...}
          })
   });

答案 1 :(得分:0)

这可以通过使用<template>元素来实现,这将阻止浏览器在打开另一个锚标签之前关闭锚标签。

<%= link_to "www.example.com", class: "so-and-so" do %>
  <%= content_tag :span, "something" %>
  
  <template>
    <%= link_to "www.another.example.com", class: "another-link" do %>
      <%= content_tag :i, class: "an-icon" %>
    <% end %>
  </template>
<% end %>

之所以能解决这个问题,是因为我正在重构将锚标记嵌套到html.erb文件中的Vue组件。每个单独的Vue组件都需要将其包装在<template>标签中,因此我将其复制并瞧了!