2009-10-30 25 views
0

我有一個(語義上不正確)HTML這樣的:名單並不想切換

<ul> 
<li class="year">2009</li> 
<li><a href="project1.html">Project 1</a></li> 
<li><a href="project2.html">Project 2</a></li> 
<li><a href="project3.html">Project 3</a></li> 
</ul> 

<ul> 
<li class="year">2008</li> 
<li><a href="project4.html">Project 4</a></li> 
<li><a href="project5.html">Project 5</a></li> 
<li><a href="project6.html">Project 6</a></li> 
</ul> 

<ul> 
<li class="year">2007</li> 
<li><a href="project7.html">Project 7</a></li> 
<li><a href="project8.html">Project 8</a></li> 
<li><a href="project9.html">Project 9</a></li> 
</ul> 

和jQuery腳本是這樣的:

$(function() { 
    $('.year').click(function() { 
     $('ul').find('li:not(.year)').slideUp('fast'); 
     $(this).closest('ul').find('li:not(.year)').toggle('fast'); 
    }) 
}) 

在需要它的工作原理差不多。默認情況下,所有ul li-s都是隱藏的,除了那些有年級的。當用戶點擊一年時,任何打開的年份鏈接都會滑動,並且點擊的年份鏈接會向下滑動。問題是,如果我點擊一年打開它,它會首先滑動(被第一行截取),然後通過切換線滑下。我希望它保持閉合狀態,而不會攔截當前點擊的年份。

希望這是有道理的。

任何幫助表示讚賞。

回答

1

也許你應該使用:hidden:visible選擇器來區分哪些已經顯示。

$(function() { 
    $('.year').click(function() { 
     $('ul').find('li:not(.year)').slideUp('fast'); 
     $(this).closest('ul').find('li:not(.year):hidden').toggle('fast'); 
    }) 
}) 
+0

這樣做,謝謝。 – janosrusiczki 2009-10-30 09:11:04

0

在其中:不是不是真的,你只能使用過濾器,而不是在這裏找到表達式,例如, :not(:blah)or:not([blah] but not:not(.blah)?