0

JQueryを使用してマルチレベル(3レベルに固定)メニューを作成しています。すべてが正常に機能していますが、私がやりたいのは、いずれかのレベルがホバーされているときにすべてのレベルが消えるようにすることです。

私はこのようなものを探しています:

$('#categories AND #subcategories AND #tags').live('-NOT-mouseover', function(){
    $('#categories, #subcategories, #tags').remove();
});

また、JQueryセレクターでAND演算子を取得する方法もわかりません。

4

3 に答える 3

6

それを選択するには、次のことができます。

   $(".commonClass:not(:hover)")

または(はい、両方とも機能します)

$('#categories:not(:hover), #subcategories:not(:hover), #tags:not(:hover)')

この2番目のものは本当に醜いですが..

あなたが望むのが「オーバーアウト」の場合:

$(yourselector).hover(handlerOut); 

(つまり)

$(yourselector).hover(function(){ console.log("i've just existed whatever you had in your selector"); }); 

あなたが望む「AND」は、サポートされていないと思います。あなたはおそらくこのようなことをしなければならないでしょう

$("#categories, #subcategories, #tags").hover(function(){
   if($('#categories:hover, #subcategories:hover, #tags:hover').length==0){
      doStuff();
   }
});
于 2012-06-30T21:50:20.640 に答える
3
  1. 使用しないでくださいlive
  2. それらの要素にクラスを与える
  3. removeDOM から要素を完全に削除します。それらを非表示にするだけです。

コード:

$('.classForThoseelements').hover(function(){
    $(this).toggle();
});

もちろん、引き続きidsを使用できます。

$('#categories, #subcategories, #tags')...

しかし、それほどきれいではありません。

于 2012-06-30T21:45:44.077 に答える
1

質問を理解したと思うので、答えを次に示します。

var leaveTimer;
$('#categories, #subcategories, #tags').hover(function() {
    if (leaveTimer) clearTimeout(leaveTimer);
}, function() {
    var $this = $(this);
    leaveTimer = setTimeout(function() {
        $this.remove();
    }, 500);
});

これが私のフィドルです:http://jsfiddle.net/LFdsV/

.show()andを使用しない理由.hide()と、要素を追加および削除する理由はわかりませんが。

また、上記はメニュー要素がネストされている場合にのみ機能することに注意してください。

于 2012-06-30T23:21:47.780 に答える