Ruby on Rails突出显示导航栏上的当前链接?

bla*_*zoo 7 ruby-on-rails menu highlight

谁能告诉我如何使用css突出显示导航栏上的当前链接(带颜色)?我不想使用控制器选项.以下是shared/menu.html.erb中的代码:

 <div id = "navigation">

  <ul>

  <li id="menu"><%=link_to "Menu", menus_path, :class => "menunav"%></li>
 <li id="drink"><%=link_to " Drinks", drinks_path, :class => "drinknav"%> </li>

 </ul>

 </div>
Run Code Online (Sandbox Code Playgroud)

Ana*_*oly 7

第一种方法是处理当前的controller_nameaction_name以检测您所在的页面.它很好,但它为客户端特定模板添加了一些服务器端.rails helper使用的方式是link_to_unless_current.JS的最低使用量.在这里查看示例

第二种是解析$(位置)并直接将某个类添加到所选的导航项以突出显示它.

第三个(取决于对象)是使用当前实体状态构建JS对象,并添加方法以将类添加到活动导航.然后,您可以实例化此JS类,传递对象并保持逻辑封装.


num*_*407 5

这样的事情将为您工作。当然,您必须根据自己的目的进行调整,可能会使匹配变得更加复杂(目前,这仅与示例中的路径匹配)。

$("#navigation a[href="+window.location.pathname+"]")
  .closest('li')
    .css('background-color', '#ff0');
Run Code Online (Sandbox Code Playgroud)

更好的是,您可以在某处定义“当前”类,然后简单地将其添加:

/* in some stylesheet */
#navigation li.current { background-color: #ff0; }

/* then the js */
$("#navigation a[href="+window.location.pathname+"]")
  .closest('li')
    .addClass('current');
Run Code Online (Sandbox Code Playgroud)


Mat*_*udy 3

有几种方法可以实现这一点,但如果您想要一种简单的方法,我建议您在正文中添加一个类。

<body class="<%= params[:controller] %>_controller">
  ...
</body>
Run Code Online (Sandbox Code Playgroud)

然后在你的 css 中你可以执行以下操作。

body.menus_controller  #navigation a.menunav,
body.drinks_controller #navigation a.drinknav {
  background-color : yellow
  color : blue
}
Run Code Online (Sandbox Code Playgroud)

如果您想要拆分多个页面,这可能会变得复杂,但对于这个基本示例来说应该没问题。