2012-06-07 67 views
5

我正在使用jQuery dataTables插件爲我們的應用程序構建高級表。其中一個要求是具有「可摺疊」行(不是組)!行表示廣告系列,並且可能有子廣告系列。子行的結構(在基本情況下)與父表中的相同 - 相同的單元格,相同的數據類型。jQuery dataTables使用fnOpen()API函數添加多個可摺疊行

但是,子行不應該影響父表本身:我的意思是,每頁的行數應該保持不變,子行不應該與父行分開排序,它們應該始終保持綁定。因此,我不能使用fnAddData() API func。

而另一個棘手的要求是具有多級摺疊行(如兒童活動兒童活動等)

我用的是fnOpen()爲 API函數,它允許可能性「打開」任何行,將一個子塊添加到它,並且通常可以插入任何你想要的。這是工作在數據表1.8.2就好了,我用這樣的代碼來生成子行:

$(childRowData).each(function(){ 
    row = $(oTable.fnOpen(row.get(0), $(this), "child_row")); 
    $(row).addClass('child_row'); 
}); 

一般來說,「打開」當前行(同上),子行中插入數據,然後在週期中「打開」子行,爲它添加了一個子項,等等。

但是從dataTables 1.9.0看起來它只允許「打開」父行,只做一次。

當然,我可以創建一個子表,申請$ .dataTable()它並把它插入到子行,但似乎有點瘸又昂貴的解決方案,尤其是當我們可能有3 -4級的深度。

是否有任何其他方式來實現dataTables中的可摺疊行?

+0

所以,看起來像沒有辦法不修改dataTables代碼。我們不想這樣做,所以我不得不使用嵌套表格。 –

回答

0

當你創建具有子子元素的子行時,你可能最好使用自己的解決方案..幾周前我正在做一些與數據表相似的東西,這是我可以提出的最好的。

6

數據表已經以某種方式更新,這是非常簡單的,現在用於增加兒童行父行:http://datatables.net/reference/api/row().child()

其中的事情不是很明顯的,就是如果你想使用相同的佈局,爲您的孩子行像父行一樣,您需要使用jquery選擇器來傳遞節點而不是字符串(寫在文檔中,但我第一次錯過)。

Doint這是正確的:

.child(
    $(
     '<tr>'+ 
      '<td>'+rowIdx+'.1</td>'+ 
      '<td>'+rowIdx+'.2</td>'+ 
      '<td>'+rowIdx+'.3</td>'+ 
      '<td>'+rowIdx+'.4</td>' 
     '</tr>' 
    ) 
) 

但這樣做是錯誤的:(它會插入你的「TR」變成了「TD」與您的表的大小的合併單元格,它顯然會打破列對齊)

.child(
    '<tr>'+ 
     '<td>'+rowIdx+'.1</td>'+ 
     '<td>'+rowIdx+'.2</td>'+ 
     '<td>'+rowIdx+'.3</td>'+ 
     '<td>'+rowIdx+'.4</td>' 
    '</tr>' 
) 
+0

你今天保存了生命。非常感謝你 –