重複の可能性:
要素の外側のクリックを検出する方法は?
ユーザーがリスト項目の1つをクリックすると、リスト項目が「アクティブ」のクラスを取得する順序付けられていないリストがあります。の行に沿ってステートメントを書くことは可能ですか。ユーザーが $(this) から別のリスト項目をクリックすると、addClass("active2") になります。わからない場合はお知らせください。ありがとうございました!
重複の可能性:
要素の外側のクリックを検出する方法は?
ユーザーがリスト項目の1つをクリックすると、リスト項目が「アクティブ」のクラスを取得する順序付けられていないリストがあります。の行に沿ってステートメントを書くことは可能ですか。ユーザーが $(this) から別のリスト項目をクリックすると、addClass("active2") になります。わからない場合はお知らせください。ありがとうございました!
私はあなたの質問を次のように理解しました:
最初にクリックされたアイテムは常にクラス
active2
を保持し、他のクリックされたアイテムはクラスを取得しますactive
(前にクリックされたアイテムから削除active
されます)。
解決策は次のようになります。
active
以前に何も選択されていなかったためactive
、現在の項目に追加します。active2
追加し、それを削除して現在のアイテムに追加します。active2
active
active
active
その項目からactive2
削除active
して現在の項目に追加active
します。これは、コードでは次のようになります。
var $lis = $("#myList li");
$('#myList').on('click', 'li', function() {
if($lis.hasClass('active')) {
if(!$lis.hasClass('active2')) {
$lis.filter('.active').toggleClass('active active2');
}
else {
$lis.filter('.active').removeClass('active');
}
}
$(this).addClass('active');
});
または、アイテムが 2 回目にクリックされた後は、これらのクラスを持つ要素アイテムが常に存在するため、要素を何度も検索する代わりに、単純にフラグを使用することもできます。
改訂された質問に対する改訂された回答:
$(document).ready(function() {
$('ul#myList li:not(.active)').click(function() {
// user has clicked on an li that does not have class="active"
$(this).addClass('active');
$('ul#myList li.active').each(function() {
// for each li with class="active", remove it and add "active2"
$(this).removeClass('active').addClass('active2');
});
});
});