2009-12-20 113 views
1

对于这个HTML代码:jQuery的遍历问题

<table> 
    <tr><td>Visible</td></tr> 
    <tr><td>Visible</td></tr> 
    <tr><td>Visible</td></tr> 
    <!-- etc... --> 
    <tr style="display:none"><td>Hidden</td></tr> 
    <tr style="display:none"><td>Hidden</td></tr> 
    <tr style="display:none"><td>Hidden</td></tr> 
    <!-- etc... --> 
    <tr><td><a class="show-5-more">Show 5 More</a></td></tr> 
</table> 

这里是jQuery代码到目前为止我有:

//show 5 more table rows (that were previously hidden) 
$('a.show-5-more').click(function() { 
    alert('clicked!'); 
    return false; 
}); 

我怎样才能做到这一点:

  • 选择第一个隐藏表格行,然后slideDown()表格行
  • 选择nex t的一,向下滑动
  • 选择下一个,等...
  • 我想5个隐藏的表行
+0

更新与该方案不滑下的一次。 – cletus 2009-12-20 05:49:31

回答

2

这将在同一个表滑下前五隐藏的行做到这一点点击该链接:

$('a.show-5-more').click(function() { 
    $(this).closest("table").find("tr:hidden:lt(5)").slideDown(); 
    return false; 
}); 

如果您想一个接一个将它们向下滑动,您有几个选项。也许最简单的方法是使用超时,有效地把它们连在一起:

$('a.show-5-more').click(function() { 
    $(this).closest("table").find("tr:hidden:lt(5)").stop().each(function(i, val) { 
    slide_down(this, i, 600); 
    }); 
    return false; 
}); 

function slide_down(el, i, delay) { 
    setTimeout(function() { 
    $(el).slideDown(delay); 
    }, i * delay); 
} 

您也可以试试在slideDown()链接回调在一起。

我会在这种情况下却建议是用<tbody>,使这个容易实现:

<table> 
<tbody> 
    <tr><td>Visible</td></tr> 
    <tr><td>Visible</td></tr> 
    <tr><td>Visible</td></tr> 
    ... 
</tbody> 
<tbody style="display: none;"> 
    <tr><td>Hidden</td></tr> 
    <tr><td>Hidden</td></tr> 
    <tr><td>Hidden</td></tr> 
    ... 
</tbody> 
<tbody style="display: none;"> 
    <tr><td>Hidden</td></tr> 
    <tr><td>Hidden</td></tr> 
    <tr><td>Hidden</td></tr> 
    ... 
</tbody> 
<tr><td><a class="show-5-more">Show 5 More</a></td></tr> 
</table> 

然后:

$('a.show-5-more').click(function() { 
    $(this).closest("table").find("tbody:hidden:first").slideDown("slow"); 
    return false; 
}); 

这是一个更简单的分组这种东西的排。

+0

这个工作,但他们都在同一时间下滑,而不是一个接一个。在开始下一张幻灯片动画之前,是否有办法等到动画完成? – Andrew 2009-12-20 05:36:38

+0

啊,貌似我误解了。 +1这更好。 – womp 2009-12-20 05:36:58

+0

所有的效果都有一个回调函数...有没有一种方法可以使用回调函数来显示当前表格行已完成显示后的下一个? – Andrew 2009-12-20 07:14:53

0

要显示5时,您可以使用

$(function() { 
    $('.show-5-more').click(function() { 
    $(this).closest('table').data('row', 0); 
    slideDownNext.call(this); 
    }); 
}); 

function slideDownNext() { 
    var $table = $(this).closest('table'); 
    if($table.data('row') < 5) { 
    $table.data('row', $table.data('row') + 1); 
    $table.find('tr:hidden:first').slideDown('', slideDownNext); 
    } 
} 
+0

这看起来像是显示了所有的表格行......你怎么一次只显示5个? – Andrew 2009-12-20 07:09:46

+0

@Andrew我修复了它。 – 2009-12-20 14:53:41