Twitterブートストラップを使用して、メインナビゲーションのli部分に対してアクティブクラスを開始する必要があります。自動的に。 Rubyではなくphpを使用します。
サンプルnav:
<ul class="nav">
<li><a href="/">Home</a></li>
<li><a href="/forums">Forums</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/faqs.php">FAQ's</a></li>
<li><a href="/item.php">Item</a></li>
<li><a href="/create.php">Create</a></li>
</ul>
ブートストラップコードは次のとおりです。
<li class="active"><a href="/">Home</a></li>
したがって、アクティブなクラスを現在のページに追加する方法を理解する必要があります。 Stackのほぼすべての答えを見て、本当の喜びはありませんでした。
私はこれで遊んでいました:
/*menu handler*/
$(function(){
var url = window.location.pathname;
var activePage = url.substring(url.lastIndexOf('/')+1);
$('.nav li a').each(function(){
var currentPage = this.href.substring(this.href.lastIndexOf('/')+1);
if (activePage == currentPage) {
$(this).parent().addClass('active');
}
});
})
しかし、喜びはありません。
最終的に修正できました。
/*menu handler*/
$(function(){
function stripTrailingSlash(str) {
if(str.substr(-1) == '/') {
return str.substr(0, str.length - 1);
}
return str;
}
var url = window.location.pathname;
var activePage = stripTrailingSlash(url);
$('.nav li a').each(function(){
var currentPage = stripTrailingSlash($(this).attr('href'));
if (activePage == currentPage) {
$(this).parent().addClass('active');
}
});
});
For Bootstrap 3:の場合
var url = window.location;
// Will only work if string in href matches with location
$('ul.nav a[href="'+ url +'"]').parent().addClass('active');
// Will also work for relative and absolute hrefs
$('ul.nav a').filter(function() {
return this.href == url;
}).parent().addClass('active');
Bootstrap 4:の場合
var url = window.location;
// Will only work if string in href matches with location
$('ul.navbar-nav a[href="'+ url +'"]').parent().addClass('active');
// Will also work for relative and absolute hrefs
$('ul.navbar-nav a').filter(function() {
return this.href == url;
}).parent().addClass('active');
BootstrapでJavaScriptは必要ありません。
<ul class="nav">
<li><a data-target="#" data-toggle="pill" href="#accounts">Accounts</a></li>
<li><a data-target="#" data-toggle="pill" href="#users">Users</a></li>
</ul>
メニュー項目が選択された後にさらにタスクを実行するには、他の投稿で説明されているJSが必要です。
お役に立てれば。
入れたら
data-toggle="pill"
タグ内で自動的に動作するはずです。
http://Twitter.github.com/bootstrap/javascript.html#tabs
マークアップで読む
これはアクティブなメインドロップダウンを含む私のために仕事をしましたおよびアクティブな子(422のおかげで):
$(document).ready(function () {
var url = window.location;
// Will only work if string in href matches with location
$('ul.nav a[href="' + url + '"]').parent().addClass('active');
// Will also work for relative and absolute hrefs
$('ul.nav a').filter(function () {
return this.href == url;
}).parent().addClass('active').parent().parent().addClass('active');
});
ルートとアクションでMVCフレームワークを使用している場合:
$(document).ready(function () {
$('a[href="' + this.location.pathname + '"]').parent().addClass('active');
});
Christian Landgrenによるこの回答に示されているように: https://stackoverflow.com/a/13375529/101662
これを試して。
// Remove active for all items.
$('.page-sidebar-menu li').removeClass('active');
// highlight submenu item
$('li a[href="' + this.location.pathname + '"]').parent().addClass('active');
// Highlight parent menu item.
$('ul a[href="' + this.location.pathname + '"]').parents('li').addClass('active');
これは私には問題ありません。単純なnav要素とドロップダウンnav要素の両方をアクティブとしてマークします。
$(document).ready(function () {
var url = window.location;
$('ul.nav a[href="' + this.location.pathname + '"]').parent().addClass('active');
$('ul.nav a').filter(function() {
return this.href == url;
}).parent().parent().parent().addClass('active');
});
this.location.pathname
を$('ul.nav a[href="'...'"]')
に渡すと、単純なnav要素もマークされます。 url
を渡すとうまくいきませんでした。
あなたがAngulajsでBoostrapを使用している場合に備えて:これは私のために働くシンプルなディレクティブです(Kamが引用したデータトグルはAngular-uiに含まれていないため)。希望が助けられる。
app.directive("myDataToggle", function(){
function link(scope, element, attrs) {
var e = angular.element(element);
e.on('click', function(){
e.parent().parent().children().removeClass('active');
e.parent().addClass("active");
})
}
return {
restrict: 'A',
link: link
};
});
<ul class="nav nav-sidebar">
<li><a href="#/page1" my-data-toggle>Page1</a></li>
<li><a href="#/page2" my-data-toggle>Page2</a></li>
<li><a href="#/page3" my-data-toggle>Page3</a></li>
</ul>
ソリューションはシンプルで、サーバー側やajaxは必要ありません。jQueryとBootstrapのみが必要です。すべてのページで、id
をbody
タグに追加します。そのid
を使用して、ページ名(タグの値)を含むタグを見つけます。
例:
page1.html
<body id="page1">
<ul class="nav navbar-nav">
<li><a href="page1.html">Page1</a></li>
<li><a href="page2.html">Page2</a></li>
</ul>
<script src="script.js"></script>
</body>
page2.html
<body id="page2">
<ul class="nav navbar-nav">
<li><a href="page1.html">Page1</a></li>
<li><a href="page2.html">Page2</a></li>
</ul>
<script src="script.js"></script>
</body>
script.js
<script>
$(function () {
$("#page1 a:contains('Page1')").parent().addClass('active');
$("#page2 a:contains('Page2')").parent().addClass('active');
});
</script>
ベンに感謝します! YouTube
完全なTwitter bootstrapの例と、クエリ文字列に基づいてアクティブクラスを適用します。
正しい解決策を達成するために従うべきいくつかの手順:
1)最新のjquery.jsおよびbootstrap.js javascriptファイルを含めます。
2)最新のbootstrap.cssファイルを含める
3)jsでクエリ文字列変数値を取得するためにquerystring-0.9.0.jsを含めます。
4)HTML:
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li class="active">
<a href="#?page=0">
Home
</a>
</li>
<li>
<a href="#?page=1">
Forums
</a>
</li>
<li>
<a href="#?page=2">
Blog
</a>
</li>
<li>
<a href="#?page=3">
FAQ's
</a>
</li>
<li>
<a href="#?page=4">
Item
</a>
</li>
<li>
<a href="#?page=5">
Create
</a>
</li>
</ul>
</div>
</div>
</div>
スクリプトタグのJQuery:
$(function() {
$(".nav li").click(function() {
$(".nav li").removeClass('active');
setTimeout(function() {
var page = $.QueryString("page");
$(".nav li:eq(" + page + ")").addClass("active");
}, 300);
});
});
私は完全なビンを行ったので、ここをクリックしてください http://codebins.com/bin/4ldqpaf
私は同じ問題を抱えていました。これがアプリ起動スクリプトに追加したもので、スムーズに機能しました。ここにjavascriptがあります
$(document).ready(function($){
var navs = $('nav > ul.nav');
// Add class .active to current link
navs.find('a').each(function(){
var cUrl = String(window.location).split('?')[0];
if (cUrl.substr(cUrl.length - 1) === '#') {
cUrl = cUrl.slice(0,-1);
}
if ($($(this))[0].href===cUrl) {
$(this).addClass('active');
$(this).parents('ul').add(this).each(function(){
$(this).parent().addClass('open');
});
}
});
});
対応するHTMLを以下に示します。私は CoreUI を使用しています。これは驚異的なオープンソース管理テンプレートであり、Angular、プレーンブートストラップ、Angular 4などの多くのフロントエンドフレームワークをサポートしています。
<div class="sidebar">
<nav class="sidebar-nav open" >
<ul class="nav" id="navTab" role="tablist">
<li class="nav-item">
<a class="nav-link" href="/summary"><i class="icon-speedometer"></i> Dashboard </a>
</li>
<li class="nav-item">
<a class="nav-link" href="/balanceSheet"><i class="icon-chart"></i> Balance Sheet </a>
</li>
<li class="divider"></li>
<li class="nav-title border-bottom">
<p class="h5 mb-0">
<i class="icon-graph"></i> Assets
</p>
</li>
</ul>
</nav>
</div>
URLにパラメータがある場合でも、メニューとサブメニューをアクティブにするには、次のコードを使用します。
// Highlight the active menu
$(document).ready(function () {
var action = window.location.pathname.split('/')[1];
// If there's no action, highlight the first menu item
if (action == "") {
$('ul.nav li:first').addClass('active');
} else {
// Highlight current menu
$('ul.nav a[href="/' + action + '"]').parent().addClass('active');
// Highlight parent menu item
$('ul.nav a[href="/' + action + '"]').parents('li').addClass('active');
}
});
これは次のようなURLを受け入れます。
/ posts
/posts/1
/posts/1/edit
$(function() {
// Highlight the active nav link.
var url = window.location.pathname;
var filename = url.substr(url.lastIndexOf('/') + 1);
$('.navbar a[href$="' + filename + '"]').parent().addClass("active");
});
詳細については、 ここをクリックしてください
これらのどれも私にとってはうまくいきませんでした。私のBootstrapセットアップは別のページにナビゲートします(したがって、クリックアクションでは実行できませんが、新しいページへのナビゲーションでアクティブなクラスは削除されます)。私のURLは完全に一致しません。だから、例外ベースの状況に基づいて、私がしたことはここにあります。他の人にも役立つことを願っています:
//Adding the active class to Twitter bootstrap navs, with a few alternate approaches
$(document).ready(function() {
var rawhref = window.location.href; //raw current url
var newpage = ((window.location.href.match(/([^\/]*)\/?$/)[1]).substring(1)); //take only the last part of the url, and chop off the first char (substring), since the contains method below is case-sensitive. Don't need to do this if they match exactly.
if (newpage == 'someNonMatchingURL') { //deal with an exception literally
newpage = 'matchingNavbarText'
}
if (rawhref.indexOf('somePartofURL') != -1) { //look for a consistent part of the path in the raw url to deal with variable urls, etc.
newpage = "moreMatchingNavbarText"
}
$(".nav li a:contains('" + newpage + "')").parent().addClass('active'); //add the active class. Note that the contains method requires the goofy quote syntax to insert a variable.
});