2014-04-24 71 views
1

當點擊div.arrow時,它的類應該切換,摺疊的內容應該展開/摺疊。這是行得通的,但div.arrow上的點擊事件並不冒泡到它的父母,li.level1。在一個相關的筆記,我怎麼會得到兄弟,span也包括在這個冒泡?jQuery點擊並不冒泡到父

HTML

<ul id="list"> 
    <li class="level1"><div class="arrow arrow-down"></div>Exact Matches 
     <ul id="ul_first" class="level1a"> 
      <li><b>GE</b> Ab Illo Inventore: ASJK: (2365)</li> 
      <li><b>GE</b> Doloremque: PEOJ: (92454)</li> 
      <li>Eaque <b>GE</b> Ipsa Quae</li> 
      <li>Porro Quisquam <b>GE</b> Est</li> 
      <li>Sit Voluptatem <b>GE</b></li> 
     </ul> 
    </li> 
    <li class="level1"><div class="arrow arrow-right"></div>Advisor <span>(7)</span> 
     <ul class="level1a"> 
      <li>Ab Ill<b>ge</b>o Inventore</li> 
      <li>A<b>ge</b>usantium</li> 
      <li>Aspernatur Aut<b>ge</b></li> 
      <li>Beata<b>ge</b>e Vitae Dicta</li> 
      <li>Consequuntur<b>ge</b></li> 
      <li>Geloremque</li> 
      <li>Geque Ipsa Quae</li> 
     </ul> 
    </li> 

CSS

li.level1 .arrow-down, li.level1 .arrow-right { 
    width: 0; 
    height: 0; 
    position: absolute; 
} 

li.level1 .arrow-down { 
    border-left: 5px solid transparent; 
    border-right: 5px solid transparent; 
    border-top: 7px solid #444; 
    left: -16px; 
    top: 7px; 
} 

li.level1 .arrow-right { 
    border-top: 5px solid transparent; 
    border-bottom: 5px solid transparent; 
    border-left: 7px solid #444; 
    left: -12px; 
    top: 5px; 
} 

JS

$('div.arrow').click(function(){ 
    var arrowRight = $(this).hasClass('arrow-right'); 
    var arrowDown = $(this).hasClass('arrow-down'); 
    console.log("R: "+arrowRight); 
    console.log("D: "+arrowDown); 

    $(this).parent().children('ul.level1a').slideToggle(); 

    if (arrowRight) { 
     $(this).removeClass('arrow-right').addClass('arrow-down'); 
    } else if (arrowDown) { 
     $(this).removeClass('arrow-down').addClass('arrow-right'); 
    }; 
}); 
+0

泡事件李,你需要綁定點擊李,而不是div.arro w – Adil

回答

0

我想你可以縮短你的代碼是:

$('#list > li').click(function() { 
    $(this).find('ul.level1a').slideToggle(); 
    $(this).find('.arrow').toggleClass('arrow-right arrow-down'); 
}); 

Fiddle Demo

+0

我很欣賞代碼縮短。我無法獲得toggleClass的工作。但是,箭頭(或跨度)仍然不會觸發單擊事件。 –

+0

我也更新了代碼以包含箭頭的CSS。 –

1

檢查演示在這裏,http://jsfiddle.net/LFp5n/

使用$(this).parent().children('span.sibling')選擇的兄弟姐妹

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

'$(this).parent()。children('span.sibling')'是我爲了使給定問題有效而添加的唯一部分,休息已經完成。感謝您的建議。 – varun91