2011-06-01 70 views
0

很新的jQuery和想知道如果有人能幫助我有以下問題,以顯示/隱藏:定位元素的基礎上匹配ID和類

使用我已生成一個列表,這樣的Textpattern;

<li class="archive-month"><a href="#" id="May2011">May</a></li> 
<li class="May2011"><a rel="bookmark" href="http://***">Post Number One</a></li> 
<li class="May2011"><a rel="bookmark" href="http://***">Post Number Two</a></li> 
<li class="May2011"><a rel="bookmark" href="http://***">Post Number One</a></li>  
<li class="archive-month"><a href="#" id="April2011">April</a></li> 

ad infinitum。

我的問題是,我如何使用<a>標籤來顯示和隱藏與標籤ID匹配的類的列表項目?例如,點擊編號爲「May2011」的a,切換隱藏和顯示所有li與「May2011」匹配的類,以此類推。

在此先感謝您的幫助。

回答

3

要提出一個替代的解決方案比@David's answer應該更高效:

$('li.archive-month > a').live('click', function() 
{ 
    $(this).parent().nextUntil('.archive-month').toggle(); 
    return false; 
}); 

你甚至可以做到使用.delegate()代替.live()如果所有<li>份額一個共同的祖先好一點 - 也許是<ul>

$('#some-common-ancestor').delegate('li.archive-month > a', 'click', function() 
{ 
    $(this).parent().nextUntil('.archive-month').toggle(); 
    return false; 
}); 

N.B.這根本不使用元素ID。相反,它依賴於與OP —中的內容一致的HTML結構,即當鏈接被點擊時應該切換的<li>是鏈接父節點的下一個兄弟節點,直到但不包括下一個帶有類的liarchive-month

+1

好吧,我會+1效率...... :) – 2011-06-01 19:27:21

+0

輝煌!非常感謝你。奇蹟般有效。 – 2011-06-01 20:46:51

5

你可以嘗試:

$('a').click(
    function(){ 
     var elemClass = this.id; 
     $('li.' + elemClass).toggle(); 
     return false; // assuming you don't want to follow the link. 
    }); 

參考文獻:

+0

['class'是未來的保留字](https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words#Future_reserved_words),因此使用它作爲變量名不是一個好主意。無論如何,你爲什麼不內聯? '$('li。'+ this.id).hide();' – 2011-06-01 19:12:32

+0

+1因爲我已經做了接近相同的解決方案的小提琴我只是把它發佈在這裏,http://jsfiddle.net/qVWgF/ 1/ – Loktar 2011-06-01 19:13:13

+0

@Matt,是啊......我忘記了'class'是保留的(並且在看到您的評論之前進行了修改,但是非常感謝!),而不是內嵌的?主要是爲了更清楚我在做什麼。但是,根據@ Loktar的(刪除的)答案,在線內容將是首選。 – 2011-06-01 19:15:17