2016-07-27 60 views
0

我有一個簡單的表格,其中所有數據都是自動生成的。我想要的是我想分開幾個月的表。它應該按降序排列。表格由月份名稱和年份分隔。在JavaScript中按月分割表格

我創建了一個小提琴來幫助你。謝謝! 小提琴: https://fiddle.jshell.net/Hive/cv3c0md2/

<table> 
<tbody> 
    <tr> 
     <td>28 may 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>23 may 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>16 jun 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>20 jun 2016</td> 
     <td>sometext</td> 
    </tr> 
    ... 
</tbody> 
</table> 

我想幾個月分裂。像這樣

<h4>May 2016</h4> 
<table> 
    <tbody> 
    <tr> 
     <td>28 may 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>23 may 2016</td> 
     <td>sometext</td> 
    </tr> 
    </tbody> 
</table> 

<h4>Jun 2016</h4> 
<table> 
<tbody> 
    <tr> 
     <td>18 jun 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>16 jun 2016</td> 
     <td>sometext</td> 
    </tr> 
    <tr> 
     <td>01 jun 2016</td> 
     <td>sometext</td> 
    </tr> 
</tbody> 
</table> 

<h4>Dec 2016</h4> 
<table> 
<tbody> 
    <tr> 
     <td>18 dec 2016</td> 
     <td>sometext</td> 
    </tr> 
</tbody> 
</table> 
+0

@AshboDev對不起。我嘗試使用.split方法,但我不知道如何讓桌子工作。 – Beekeeper

回答

0

如果將原始行移動到其對應的表中,則不必擔心以後向表中添加額外的列。 用jQuery移動行可以通過將它們附加到另一個表來完成。

您提到了排序,所以下面的內容考慮到源表格沒有正確的排序順序。 (如果它已經是,映射就可以跳過去,因此代碼可能會有所縮短):

var table= $('table'), //might need a more specific selector if there are more tables 
    rows = table.find('tr').remove().map(function(ind,tr){ //Note the remove. While obtaining the rows, they are also removed from the original table 
     var d = new Date($(tr).children('td:first').text()); 
     return {Row:tr, Date: d, yearMonth : d.getYear() * 100 + d.getMonth()}; //create a mapping of the table row, its date and the month (+year to be safe) 
    }).get(), 
    curym, 
    monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
rows.sort(function(r1,r2) { return (r1.yearMonth - r2.yearMonth) || r2.Date - r1.Date ; }) //sort so that months are ascending and inner dates are descending. 
    .forEach(function(o){ 
    if(o.yearMonth != curym){ //another month 
    if(curym)table = $('<table>').appendTo(table.parent()); //only start a new table on a second run, otherwise reuse existing table 
    curym = o.yearMonth; 
    $('<h4>').text(monthNames[curym % 100]).insertBefore(table); //insert the header 
    } 
    table.append(o.Row); 
}); 

實現你的提琴:https://fiddle.jshell.net/cv3c0md2/4/(例如小提琴也包含在同一天2次,以顯示它們進行排序)

+0

是否有可能保持實施5,IAM新的JavaScript這個東西會超出我的頭。如果我在(15:30,18:25,23:40 ..) – Beekeeper

+0

這樣的日期旁邊實施時間,這是否會起作用ES6功能應在編輯中刪除。只要內容形成可以解析爲日期(時間)的格式,添加時間就不應該成爲問題。在示例小提琴中,我已經添加了一個時間作爲示例。如果時間被添加到一個單獨的列,他們將不會干預,但他們將不會被包括在降序 –

+0

這是偉大的,非常感謝很多人。 – Beekeeper

1

嘿,我已經創建了一個相同的的jsfiddle和我假設從子表將創建已排序的主表。

的jsfiddle: - https://fiddle.jshell.net/cv3c0md2/1/

代碼: -

var monthNames = ["January", "February", "March", "April", "May", "June", 
     "July", "August", "September", "October", "November", "December" 
    ]; 

    function createRow(row, tr) { 
     $('<td></td>').text(row.find("td:eq(0)").text()).appendTo(tr); 
     $('<td></td>').text(row.find("td:eq(1)").text()).appendTo(tr); 
     $('<td></td>').text(row.find("td:eq(2)").text()).appendTo(tr); 
    } 

    function createTables() { 
     var lastMonth; 
     $.each($("table").find("td:nth-child(1)"), function(index, td) { 
      var row = $(td).closest("tr"); 
      var d = new Date($(td).text()); 
      var table = $("<table />"); 
      var tr = $("<tr></tr>"); 

      if (lastMonth && lastMonth === d.getMonth()) { 
       $(".result").find("table:last").append(tr); 
       createRow(row, tr); 
      } else { 
       var h = $("<h/>"); 
       h.text(monthNames[d.getMonth()] + " " + d.getFullYear()); 
       table.append(tr); 
       createRow(row, tr); 
       $(".result").append("<br/>") 
       $(".result").append(h); 
       $(".result").append(table); 
       lastMonth = d.getMonth(); 
      } 
     }); 
    } 
    $(function() { 

     $("#ds").click(function() { 
      createTables(); 
     }); 
    }); 

在此,你需要點擊拆分按鈕,它會在一個錶轉換成多個表,你可以修改它根據自己的需要。

+0

這很好,但我如何將這個應用到表格而不使用按鈕。我想在用戶登錄頁面時顯示月份和年份的表格。 – Beekeeper

+0

直接調用「createTables」methodss方法來代替點擊按鈕。接受答案,如果它適合你 –