Rails 4:如何使用 jQuery 为当前页面设置导航样式

Posted

技术标签:

【中文标题】Rails 4:如何使用 jQuery 为当前页面设置导航样式【英文标题】:Rails 4: How to style navigation for current page using jQuery 【发布时间】:2016-07-02 13:10:47 【问题描述】:

我已经阅读了很多关于如何突出显示/样式链接以向用户显示他们当前页面的内容。这些解决方案似乎都不起作用。我有一个带有<a href="/foo/"> 等链接的导航栏和一个带有<a href="/foo/bar"> 的下拉菜单,当当前页面为/foo/bar 时,我想为两个链接(/foo//foo/bar)添加一个类。

我已尝试使用CSS-Tricks 上的解决方案并尝试编写自己的 jQuery,但无法选择 所有 正确的 DOM 元素。

有没有更好的 jQuery 解决方案或在服务器端执行此操作的方法?

【问题讨论】:

查看this answer 和this blog post。 谢谢,帮了大忙! 唯一的问题是当current_route = Rails.application.routes.recognize_path(path)params[:controller] == current_route[:controller] 对于来自同一控制器的链接为真,即使操作不同 【参考方案1】:

基本上,您想检查您当前的控制器和操作是否是链接中的那些。

好的,下面是一些示例代码:

application.css(为了便于查看...使用您自己的):

a.myLink 
   color: blue;
   background: white;
   size: 24px;


a.active 
  background: green;
  color: pink;

在你的帮助脚本中(我把我的放在 application_helper 中):

module ApplicationHelper
  def active_link?(controller, *action)
    controller.include?(controller_name) && action.include?(action_name)
  end
end

在你的布局页面中(我的是views/layouts/application.html):

<%= controller_name %>
<%= action_name %>
  <br>

  <%= link_to "list articles", articles_path, class:"myLink #active_link?('articles', 'index') ? 'active' : '' " %>
  <%= link_to "new article", new_article_path, class:"myLink #active_link?('articles', 'new') ? 'active' : '' "  %>
  <br>
  <%= link_to "list posts", posts_path,  class:"myLink #active_link?('posts', 'index') ? 'active' : '' "  %>
  <%= link_to "new post", new_post_path,  class:"myLink #active_link?('posts', 'new') ? 'active' : '' "  %>

  <%= yield %>

</body>

【讨论】:

以上是关于Rails 4:如何使用 jQuery 为当前页面设置导航样式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery Mobile 1.4.5 中获取当前页面 URL?

在 Rails 4.1 中将页面特定的 jQuery 代码放在哪里?

如何在rails中异步加载部分页面

如何使用 Rails 5 + jQuery 保持通过 Turbolinks 提交的页面状态

Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

如何让 Jquery UI Autocomplete 与 Rails 4 一起使用?