数据表子行未显示

时间:2015-09-23 15:23:17

标签: jquery datatable 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>

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

<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>

1 个答案:

答案 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/