我正在使用jQuery dataTables插件为我们的应用程序构建高级表。其中一个要求是要有“可折叠的”行(而不是组!):例如,行代表运动,并且可能有子活动。子行的结构(基本情况下)与父表中的结构相同--相同的单元格、相同的数据类型。
但是,子行不应该影响父表本身:我的意思是,每个页面的行数应该保持不变,不应该将子行与父行分开排序,它们应该始终保持绑定。因此,我不能使用fnAddData() API函数。
另一个棘手的要求是有可能有多层次的可折叠行(例如,儿童运动,等等)。
为此,我使用了fnOpen() API函数,它允许“打开”任何行,并在其上附加一个子块,您通常可以在那里插入您想要的任何内容。在dataTables 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中还有其他实现可折叠行的方法吗?
发布于 2012-09-11 02:53:42
当您创建具有子子的子行时,您可能最好滚动您自己的解决方案。几周前,我用数据数据做了一些类似的事情,这是我能想到的最好的了。
发布于 2014-05-14 08:36:11
数据已经以某种方式更新了,现在它非常直接地将子行添加到父行:http://datatables.net/reference/api/row().child()
其中一件不太明显的事情是,如果您想对您的子行使用与父行相同的布局,您需要使用jquery选择器来传递一个节点,而不是一个字符串(在文档中写入,但我第一次忽略了它)。
这是正确的:
.child(
$(
'<tr>'+
'<td>'+rowIdx+'.1</td>'+
'<td>'+rowIdx+'.2</td>'+
'<td>'+rowIdx+'.3</td>'+
'<td>'+rowIdx+'.4</td>'
'</tr>'
)
)
但这样做是错误的:(它会将您的"tr“插入到具有表大小的”tr“中,并且显然会破坏列对齐)
.child(
'<tr>'+
'<td>'+rowIdx+'.1</td>'+
'<td>'+rowIdx+'.2</td>'+
'<td>'+rowIdx+'.3</td>'+
'<td>'+rowIdx+'.4</td>'
'</tr>'
)
https://stackoverflow.com/questions/10930427
复制相似问题