2013-04-09 70 views
2

我有一個表,看起來像這樣摺疊錶行:多TBODY元素

<table> 
    <thead> 
     <tr><th>Customer</th><th>Order</th><th>Month</th></tr> 
    </thead> 
    <tbody> 
     <tr><td>Customer 1</td><td>#1</td><td>January</td></tr> 
     <tr><td>Customer 1</td><td>#2</td><td>April</td></tr> 
     <tr><td>Customer 1</td><td>#3</td><td>March</td></tr> 
    </tbody> 
    <tbody> 
     <tr><td>Customer 2</td><td>#1</td><td>January</td></tr> 
     <tr><td>Customer 2</td><td>#2</td><td>April</td></tr> 
     <tr><td>Customer 2</td><td>#3</td><td>March</td></tr> 
    </tbody> 
    <tbody> 
     <tr><td>Customer 3</td><td>#1</td><td>January</td></tr> 
     <tr><td>Customer 3</td><td>#2</td><td>April</td></tr> 
     <tr><td>Customer 3</td><td>#3</td><td>March</td></tr> 
    </tbody> 
    .... 
    .... 10s of records like this 
</table> 

我要讓每個tbody元素點擊(可摺疊),以便在摺疊狀態下,我會得到的彙總裏面是什麼(比如說,Customer 1 | 3 Entries)和擴展狀態,我會看到實際的行。

這可以完成表結構如上所示嗎?

的jsfiddle這裏:http://jsfiddle.net/Ju4xH/

+0

客戶1 | 3條目我沒有得到這個?請你說清楚一點..我知道你需要每個人都可以喝點東西,當你點擊那個標題時可以展開那個人。 – rahularyansharma 2013-04-09 05:09:20

+0

@rahularyansharma:這只是一個示例,在摺疊狀態下,摺疊行顯示內部行的總數。例如,在我的表中,對於Customer 1,有三個內部行。 – Legend 2013-04-09 05:13:46

+0

將摘要行設置爲靜態並始終顯示一個按鈕以摺疊或展開詳細信息行更方便用戶使用。點擊任何地方摺疊tbody是一個意想不到的行爲。 – RobG 2013-04-09 05:41:12

回答

4

這是一個有點亂,動畫不工作(我猜這是因爲它是在<tr> S,但這裏是我想出了:

$(document).ready(function() { 
    $("table").on("click", "tbody", function() { 
     var $this = $(this); 
     var myTRs = $this.children("tr"); 

     if ($this.hasClass("collapsed")) { 
      $this.removeClass("collapsed"); 
      myTRs.first().remove();    
      myTRs.show(); 
     } else { 
      $this.addClass("collapsed"); 
      var newInfo = myTRs.first().children("td").first().text() + " | " + myTRs.length + " entries"; 
      myTRs.hide(); 
      $this.prepend($("<tr><td colspan='3'>" + newInfo + "</td></tr>").hide()).find("tr").first().slideDown(); 
     } 
    }); 
}); 

DEMO:http://jsfiddle.net/ZhqAf/1/

當你點擊一個未塌縮<tbody>,它會隱藏行和前面加上一個新的你想要的細節編輯。當您單擊摺疊的<tbody>時,它將刪除新的「詳細信息」行,並顯示原始行。

+0

+1謝謝。出於某種原因,摺疊擴展行時會有一些不必要的延遲。你碰巧知道爲什麼會出現這種情況?我試過Chrome和Firefox。 – Legend 2013-04-09 05:14:43

+0

@Legend是的,這是因爲滑動動畫。就像我在答案中所說的那樣,動畫不起作用(可能是因爲它們發生在''上。不管怎樣,我更新了我的答案代碼並且不用它們就可以搞定(可能應該首先完成這一步) )因此,讓我知道,如果這可以解決你的意思,如果你需要更多的幫助:) – Ian 2013-04-09 05:18:01

1

我已經包含每行的標題,方法是計算該tbody中的行數,並在插入後在每個標頭上綁定點擊事件以顯示該tbody的內容。

$(document).ready(function(){ 
    $('table tbody').each(function(){ 
     var num=$(this).children().length; 
     // alert(num); 
     $(this).before("<div id='header' class='header'>"+num +" entries </div>"); 
     //alert($(this).html()); 
     $(this).hide(); 
    }); 
    $('.header').on('click',function(){ 
     $(this).next().slideToggle("slow"); 
    }); 
}); 

JS FIDDLE LINK

EDITED

如果你真的想要幻燈片動畫你可以用所有tbody也是一個div。所以slideToggel也會給你動畫。您可以使用此如下:

$(document).ready(function(){ 
    $('table tbody').each(function(){ 
     var num=$(this).children().length; 
     // alert(num); 
     $(this).before("<div id='header' class='header'>"+num +" entries </div>"); 
     //alert($(this).html()); 
     $(this).wrap('<div class="new" />'); 
     $('.new').hide(); 
    }); 
    $('.header').on('click',function(){ 

     $(this).next().slideToggle("slow"); 
     $(this) 
    }); 
}); 

JS FIDDLE LINK FOR EDITED PART

+0

downvote沒有評論gr8 :) – rahularyansharma 2013-04-09 06:23:47

+0

即使我很好奇爲什麼這是投票。我剛看到這種方法,它看起來簡潔而乾淨。任何人,關心評論?我投票賠償。感謝您的時間。 – Legend 2013-04-09 19:26:48

+0

@傳說謝謝! – rahularyansharma 2013-04-10 04:38:57