2011-06-01 74 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