DataTables删除另一页上的子项

时间:2014-09-03 15:30:46

标签: javascript jquery html datatables

我现在试了好几个小时,却想不出这个...... 我在DataTables中添加了一些jQuery-UI手风琴风格效果,以显示子行内的div。因此,当您单击一行时,将添加子项并展开div,如果单击同一行,div将隐藏动画并删除子项。如果在子项打开时单击另一行,则隐藏第一个子div,然后删除第一个子项,然后添加新子项并显示div。

这在每个页面上都可以正常工作。但如果我换页面,第一个孩子就不会被移除。

我有这段代码:

var openschoolingschild = "nothing"; //Variable to store css-id of row which has an open child
var openschoolingsrow = ""; //Variable to store which row has a child


$('#training_management_schoolings_items_table tbody').on('click', 'tr', function () {
    var tr = $(this).closest('tr');
    var row = oTable.row( tr );
    var thisid = $(this).attr('id');
    $('#training_management_schoolings_items_table tbody tr').removeClass('shown');
    if ( row.child.isShown() ) {
        $('#'+thisid+'_details').hide("blind",300,function(){
          row.child.remove();
          tr.removeClass('shown');
        });
      openschoolingschild = "nothing";
      openschoolingsrow ="";
    }
    else {
      if (openschoolingschild != "nothing") {
        $('#'+openschoolingschild+'_details').hide("blind",300,function(){
          $("#"+openschoolingschild).removeClass('shown');
          openschoolingsrow.child.remove();
        });
        row.child( training_management_details(thisid) , "training_management_schoolings_table_child" ).show();
        tr.addClass('shown');
        $('#'+thisid+'_details').show("blind",300,function(){
          openschoolingschild = thisid;
          openschoolingsrow = row;
          preventcollapse();
          });
      }
      else {
        row.child( training_management_details(thisid), "training_management_schoolings_table_child" ).show();
        tr.addClass('shown');
        $('#'+thisid+'_details').show("blind",300,function(){
          preventcollapse();
          openschoolingschild = tr.attr('id');
          openschoolingsrow = row;
        });
      }
    }
  });

jQuery-on-part在DataTables init.DT-callback-function中执行,如你所见,我将一个子行存储在一个全局变量中。

我想我无法移除孩子,因为当我切换页面时,DOM中没有它。但DataTables仍保留数据,根据DataTables手册和论坛,您可以访问"隐藏"部分。我没有使用表的服务器端处理。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

嗯,傻我。我刚刚找到了解决方案。更多的解决方法,但它很好,因为当我更改页面或重新绘制表格时,我不必保持孩子们打开。

"fnInfoCallback": function(){
      if (row != undefined) {
        row.child.remove();
      }

我将行指定为全局变量,因此它是永久性的。