2010-05-18 58 views
2

我有以下列表:jQuery的只有類和父元素應用功能

<ul> 
<li class="topCurrent">One 
    <ul> 
     <li>One-1 
      <ul> 
       <li>One-1.1 
        <ul> 
         <li class="current">One-1.1.1 
          <ul> 
           <li>One-1.1.1.1</li> 
           <li>One-1.1.1.2</li> 
           <li>One-1.1.1.3</li> 
          </ul> 
         </li> 
         <li>One-1.1.2</li> 
        </ul> 
       </li> 
       <li>One-1.2</li> 
      </ul> 
     </li> 
     <li>One-2</li> 
     <li>One-3</li> 
    </ul> 
</li> 
<li>Two 
    <ul> 
     <li>Two-1</li> 
     <li>Two-2</li> 
    </ul> 
</li> 

使用下面的jQuery:

$("ul li ul").hide(); 

$("ul li").hoverIntent(
    function(){ 
     $(this).children('ul').slideDown('fast'); 
    }, 
    function(){ 
     $(this).children('ul').slideUp('fast'); 
    } 
); 

這樣做是隱藏所有微升低於最高級別的ul,直到有一個懸停在它上面。

我想這樣做是這樣的:

如果李有class="current"我想這個結構是開放的,直到該電流擊中點。它仍然可以讓它下面的ul顯示在懸停以及任何其他ul上,但是class="current"的父母絕不會隱藏。

對此提出建議?這個問題一直讓我發瘋。

謝謝!

回答

2

這應該是所有你需要:

$("ul li:not(:has(li.current))") 
    .find("ul").hide().end() // Hide all other ULs 
    .hoverIntent(
     function(){ 
      $(this).children('ul').slideDown('fast'); 
     }, 
     function(){ 
      $(this).children('ul').slideUp('fast'); 
     } 
    ); 

這將保持懸停功能從應用到具有li.current作爲一個孩子的任何LI。

Here is a demo(使用懸停代替hoverIntent以便於演示)。

+0

太棒了!謝謝。 :) – kylex 2010-05-18 20:32:04

0

只要改變你的hoverIntent調用以下:

$("ul li").hoverIntent(
    function(){ 
     $(this).children('ul').slideDown('fast'); 
    }, 
    function(){ 
     $(this).children('ul').not($('.current').parents()).slideUp('fast'); 
    } 
); 

附:應該提及我的回答參考Nick Craver的答案you asked this question before。 P.P.S.希望我的調試時間減少了,因爲您引用該帖子並且不更改類名稱。

+0

對不起'回合! – kylex 2010-05-18 20:24:01

相關問題