2009-12-20 84 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