2013-01-24 144 views
2

HTML排除孩子:我需要從find()方法

<ul> 
    <li class="listExpandTrigger"><h3>2010 - present</h3></li> 
    <li class="listCollapseTrigger"><h3>2010 - present</h3></li> 
    <li> 
    <ul class="volumeList"> 
     <li class="listExpandTrigger"><h3>Volume 13</h3></li> 
     <li class="listCollapseTrigger"><h3>Volume 13</h3></li> 
     <li> 
     <ul class="issueList"> 
      <li>1</li> 
      <li>2</li> 
      <li>3</li> 
      <li>4</li> 
     </ul> 
    </ul> 
    </li> 
</ul> 

CSS:

.listCollapseTrigger, .volumeList, .issueList{ 
    display: none; 
} 

JS:

$('body').on('click', '.listExpandTrigger', function(){ 
    $(this).parent().find('ul').css('display', 'block'); 
    $(this).parent().find('.listExpandTrigger').css('display', 'none'); 
    $(this).parent().find('.listCollapseTrigger').css('display', 'block'); 
}); 

我知道有更多的步驟與完成Javascripts,但我有問題的權利走出了門。我需要排除子類和ul的或者隻影響它被告知find()的第一個實例。此時該函數會影響觸發器父代中的所有內容,這很有意義。我只是不知道如何解決它。謝謝!

+1

[這個線程(http://stackoverflow.com/questions/977883/selecting-only-first-level-elements-in-jquery)似乎涵蓋的話題。 – JakeGould

回答

4

使用first

$(this).parent().find('ul').first().css('display', 'block'); 
+0

是的!謝謝! – NominalAeon

2

爲什麼不使用的.next()方法有UL選擇?

$(this).next("ul").css('display', 'block'); 
+0

感謝您的回覆,這同樣有幫助。我將使用first()函數,因爲我認爲它使代碼更加自明。否則,我可以同時使用這兩種方法(_first_和_next_),它們都是同樣好的解決方案。 – NominalAeon

+0

我認爲使用first()可能會在後面引入更多問題。假設您爲「volumeList」ul添加了兩個卷,現在您擁有12,13和14.如果您單擊第13卷的擴展器,它將錯誤地擴展第12捲上的問題。.next()似乎更好地匹配功能,但是我可能會誤解您要使用此項目的位置。 –