将Javascript添加到应用程序布局视图页面
我需要突出显示与当前页面相关的链接按钮 在将Javascript添加到应用程序布局视图页面,javascript,ruby-on-rails,layout,view,Javascript,Ruby On Rails,Layout,View,我需要突出显示与当前页面相关的链接按钮 在apps/views/layouts/application.html.erb中: <ul class="nav nav-tabs"> <li class="link_style"><a href="/">link1</a></li> <li class="link_style"><a href="/about">link2</a></l
apps/views/layouts/application.html.erb
中:
<ul class="nav nav-tabs">
<li class="link_style"><a href="/">link1</a></li>
<li class="link_style"><a href="/about">link2</a></li>
<li class="link_style"><a href="/posts">link3</a></li>
</ul>
我认为这会很有效。但是,我不确定应该将js代码添加到哪个.js文件中。我的猜测是/app/views/layouts/application.js.erb
我的方法正确吗?如果您使用Rails 3.1或更高版本应用程序的默认设置,您可以将其放置在
app/assets/javascripts
中的任何.js
文件中。请务必在的使用中查看
$('li.link_style').on('click', function(){
$(this).addClass('active'); // and then add active class for clicked element.
});
但是不会工作,因为当点击链接时页面(和JS)将被重新加载。更有用的东西可能是这样的:
$(document).ready(function() {
$(".nav li.link_style").each(function(){
var link = $(this).find($(a));
if(window.location.pathname == link.attr("href")){
link.addClass("active");
}
});
});
这将循环浏览nav类中的所有li元素,并将当前页面的路径与链接的href进行比较,然后在匹配的情况下添加活动类。您应该在JS文件的$(document).ready(function(){}部分中放入类似的内容。至于添加到哪个JS文件,它可以是资产管道(Rails 3.1+)中包含的任何JS文件或者你的application.js,正如你所说。哪个版本的Ruby on Rails?你能给它添加一点吗?在/app/views/posts中,我有like.js.erb,它与PostsController中的“like”操作相关。所以我想我必须将它放在/app/views/layout目录中才能正确关联。如果我把它放在app/assets/javascripts中,我是否需要从m application.js?那么js文件的名称无关紧要?您是否必须在application.js中执行//=要求一些_name.js?如果您正在使用该文件,则只要它包含在资产管道中,名称就无关紧要(看起来是这样的)。因此,application.js文件中需要包含上面突出显示的链接的app/assets/javascripts/my_link_highlighter.js文件,方法是添加行//=require my_link_highlighter在这种情况下如何调用js?我更新了js以提供如何加载它,在这种情况下,它位于$(文档)上.ready,以便在DOM完全加载时运行。
$(document).ready(function() {
$(".nav li.link_style").each(function(){
var link = $(this).find($(a));
if(window.location.pathname == link.attr("href")){
link.addClass("active");
}
});
});