我正在关注Datatables Sliding Child Rows上的这篇博文,但是点击后我无法显示我的行..我只是希望能够在单击第一列时显示子行。我做错了什么?
我的jQuery
<script type="text/javascript">
$(document).ready(function(){
$('#products').DataTable({
"lengthMenu": [[20, 50, 100, 500, -1], [20, 50, 100, 500, "All"]],
"columnDefs": [{ className: "details-control", "targets": [ 0 ] }]
});
});
</script>
<script type="text/javascript">
$('#products tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
$('div.slider', row.child()).slideUp( function () {
row.child.hide();
tr.removeClass('shown');
} );
}
else {
// Open this row
row.child( format(row.data()), 'no-padding' ).show();
tr.addClass('shown');
$('div.slider', row.child()).slideDown();
}
} );
</script>
然后表格本身带有一些虚拟数据显示
<table id="products" class="table table-striped table-hover table-bordered
table-condensed">
<thead>
<tr>
<th> </th>
<th> </th>
<th><a>TITLE</a></th>
<th><a>ASIN</a></th>
<th><a>PRICE</a></th>
<th><a>SKU</a></th>
<th> </th>
<th> </th>
</tr>
</thead>
<tbody class="product-index">
<% @merchant.products.each do |product| %>
<tr>
<td>+
<div class="slider" name>
<table>
<tr>
<td>
... Data to be shown ...
</td>
</tr>
</table>
</div>
</td>
<td><%= check_box_tag('sellersku[]', product.sellersku) %></td>
<td><%= product.title %></td>
...
<% end %>
</tbody>
</table>
答案 0 :(得分:7)
首先,您缺少table
引用,即var table = $('#products').DataTable()
。
您还需要实际插入子行的内容。 dataTables子行是动态插入的 - 您不能像标记所示那样使用静态内容。通常,您将使用一个返回子行内容的函数,通常称为format(data)
(并且您实际上在复制的代码中有对此函数的引用),其中data
是父行本身。但你可以随心所欲地做到这一点。以下是问题的标记:
function format(data) {
return '<div class="slider" name>'+
'<table>'+
'<tr>'+
'<td>'+
'... Data to be shown ...'+
'</td>'+
'</tr>'+
'</table>'+
'</div>'
}
这两项更改使您的代码正常工作,包括幻灯片效果 - &gt;的 http://jsfiddle.net/LmudsL36/ 强>