残念ながら、リンクからクラスを追加および削除する方法についてのチュートリアルを探していましたが、成功しませんでした。これに関する以前のすべての質問は私にある程度の理解を与えましたが、私が達成したい結果を私に与えませんでした。
リンクがクリックされたときにクラスを追加および削除して、ナビゲーションをアクティブな状態にしようとしています。
これが私がJavaScriptに関して持っているものです:
$(document).ready(function(){
//active state
$(function() {
$('li a').click(function(e) {
e.preventDefault();
var $this = $(this);
$this.closest('li').children('a').removeClass('active');
$this.parent().addClass('active');
});
});
});
そしてこれが私のナビゲーションです:
<div id="nav">
<div id="main-nav" class="center">
<ul>
<li><a href="/photography.php">Photography</a></li>
<li><a href="/web.php">Web</a></li>
<li><a href="/print.php">Print</a></li>
<li class="nav-R"><a href="/about.php">About</a></li>
<li class="nav-R"><a href="/contact.php">Contact</a></li>
</ul>
</div><!-- close center -->
</div><!-- close-nav -->
最も近いli
の子要素から「active」クラスを削除してから、現在のa
の親li
にアクティブクラスを追加します。リストアイテムではなくアンカーにアクティブクラスを保持するという精神で、これはあなたのために機能します:
$('li a').click(function(e) {
e.preventDefault();
$('a').removeClass('active');
$(this).addClass('active');
});
アクティブリンクはアクティブリンクです。常に複数のリンクがアクティブになることはないため、active
クラスの削除について具体的に説明する理由はありません。すべてのアンカーから削除するだけです。
試してみてください:
_$(function() {
$('li a').click(function(e) {
e.preventDefault();
var $this = $(this);
$this.closest('ul').find('.active').removeClass('active');
$this.parent().addClass('active');
});
});
_
セレクターは、現在の($(this)
)a
要素の親要素を調べ、次にその要素の子の中からa
を探していました。その要素のa
は、クリックしたものだけです。
私のソリューションは、代わりに最も近いul
に移動し、次に_element that currently has the class of
_ active`を見つけて、そのクラスを削除します。
また、投稿されたアプローチでは、active
クラス名をli
要素に追加し、a
要素からクラス名を削除しようとしていました。私のアプローチではli
を使用しますが、最終行からparent()
を削除するだけで、a
を使用するように修正できます。
参照:
私はあなたが欲しいと思います:
$this.parents("ul").find("a").removeClass('active');
これを試して:
$(function() {
$('.start').addClass('active');
$('#main-nav a').click(function() {
$('#main-nav a').removeClass('active');
$(this).addClass('active');
});
});
クラス.startを最初にクラス.activeにしたいnav要素に追加するだけです。
次に、次のようにcssでクラス.activeを宣言します。
#main-nav a.active {
/* YOUR STYLING */
}