4

wrapperのクラスを持つdiv 内の要素を見つけようとしていますactiveが、クリックした要素ではありません。

.titleクラスをクリックすると機能するコードは次のとおりです。


$(".title").click(function(){
    if ($("#wrapper ul li").hasClass("active")) {
        alert("found one!");
    }
});

しかし、クリックしたものではないかどうかを確認する方法がわかりません。if ステートメントに.not(this)andを追加しようとしましたが、役に立ちませんでした。.not($(this))

removeClass現在選択されている div ではないものにi plan を追加する必要があります。

私はどこかで何かが間違っていると確信しています。

参考までに、HTML は次のとおりです。

<div id="wrapper">
    <ul>
        <div class="title">Title</div>
        <li class="active">Active Clicked List Item</li>
    </ul>
    <ul>
        <div class="title">Title</div>
        <li>Some Other List Item</li>
    </ul>
    <ul>
        <div class="title">Title</div>
        <li>Some Other List Item</li>
    </ul>
</div>

これを行う方法について何か提案はありますか?

4

2 に答える 2

4

HTMLが無効DIVあり、の子になることはできないことに注意してくださいUL$('.title')適用しているクラスではないため、セレクターはどちらを使用しても正しくありませんactive to

hasClass()ブール値を返すため、連鎖できません

何をしようとしているのか正確にはわかりませんが、示されているコードに基づいて、not()前にフィルターを使用する必要がありhasClass()ます。

if ($("#wrapper ul li").not(this).hasClass("active")) {

また

if ($("#wrapper ul li.active").not(this).length) {

クラスを削除するだけの場合は、現在のクラスに追加する前に、アクティブなクラスをすべてから削除するだけで、最初にテストする必要はありません。

于 2013-03-03T14:21:47.513 に答える
3

を使用notすると、要素を除外できます。

$('#wrapper li').click(function(){
  $('#wrapper li').not(this).removeClass('active');
  $(this).addClass('active');
});

デモ: http: //jsfiddle.net/97DXe/

addClassをコメントアウトすると、すでにアクティブな要素をクリックしてもクラスが削除されないことがわかります。

クリックされた要素にアクティブなクラスを設定する場合、最初にすべての要素からクラスを削除するだけでもそれほど害はないので、は必要ありませんnot

于 2013-03-03T14:22:41.013 に答える