web-dev-qa-db-ja.com

ナビゲーションリンクからアクティブクラスを追加および削除します

残念ながら、リンクからクラスを追加および削除する方法についてのチュートリアルを探していましたが、成功しませんでした。これに関する以前のすべての質問は私にある程度の理解を与えましたが、私が達成したい結果を私に与えませんでした。

リンクがクリックされたときにクラスを追加および削除して、ナビゲーションをアクティブな状態にしようとしています。

これが私が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 -->
5
user782245

最も近いliの子要素から「active」クラスを削除してから、現在のaの親liにアクティブクラスを追加します。リストアイテムではなくアンカーにアクティブクラスを保持するという精神で、これはあなたのために機能します:

    $('li a').click(function(e) {
        e.preventDefault();
        $('a').removeClass('active');
        $(this).addClass('active');
    });

アクティブリンクはアクティブリンクです。常に複数のリンクがアクティブになることはないため、activeクラスの削除について具体的に説明する理由はありません。すべてのアンカーから削除するだけです。

デモ: http://jsfiddle.net/rq9UB/

16
AlienWebguy

試してみてください:

_$(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');
0
Adam Rackis

これを試して:

$(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 */

}
0
Melros