数据表子行未显示

Tod*_*ddT 2 datatable jquery parent-child

我正在关注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>
Run Code Online (Sandbox Code Playgroud)

然后表格本身带有一些虚拟数据来显示

<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>
Run Code Online (Sandbox Code Playgroud)

dav*_*rad 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>'
}
Run Code Online (Sandbox Code Playgroud)

这两个更改使您的代码工作,包括幻灯片效果 - > http://jsfiddle.net/LmudsL36/