2013-11-24 7 views
9

クリックするたびにリスト項目のアクティブなクラスを削除して設定しようとしています。現在、選択されているアクティブなクラスは削除されていますが、設定されていません。私が逃しているものは何ですか?ulリストのアクティブなクラスをjqueryで追加/削除しますか?

HTML

<ul class="nav nav-list"> 
    <li class='nav-header'>Test</li> 
    <li class="active"><a href="page1.php">Page 1</a></li> 
    <li><a href="page2.php">Page 2</a></li> 
    <li><a href="page3.php">Page 3</li> 
</ul> 

jqueryの:

$('.nav-list').click(function() { 

    //console.log("Clicked"); 
    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 
+1

ちょっと考えましたが、リスト内のリストオブジェクトではなく、実際のリストにアクティブなクラスを追加している可能性がありますか? .nav-list liから削除しますが、 '$(これ) 'を記録すると.nav-list – Chikilah

+0

に追加すると、イベントがリスト自体を参照することになります。あなたはlistelement '$( '。nav-list li')'を参照するか、イベント委任を@minitechによってdesrcibedとしてよく使うようにしてください。 –

答えて

26

thisは、によって選択された<ul>を指します。代わりに委任を使うことができます!

$('.nav-list').on('click', 'li', function() { 
    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 
+1

ありがとうございます – Nothing

5

はこれを試してみてください、あなたの文脈では

$('.nav-list li').click(function() { 

    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 

$(this)UL要素ではないLiを指します。したがって、あなたは期待された結果を得ていません。

+2

の下では、トリックは...ありがとう! – Paul

+0

@Paul常に喜んで助けてください。 –

10

あなたは兄弟removeClass方法

$('.nav-link li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 
+0

これはほぼ一年前に起こっていることを知っていますが、このソリューションは私のために働いた! – Michael

1

を使用することができます私はこれを使用:

$('.nav-list li.active').removeClass('active'); 
$(this).parent().addClass('active'); 

アクティブクラスは<li>要素であり、何があるので、クリック数:最初の行はすべて<li>から.activeを削除し、2番目の行($(this)はをクリックした要素です)は、.activeを直接親に追加します。<li>です。

関連する問題