我现在试了好几个小时,却想不出这个...... 我在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手册和论坛,您可以访问"隐藏"部分。我没有使用表的服务器端处理。
我错过了什么?
答案 0 :(得分:1)
"fnInfoCallback": function(){
if (row != undefined) {
row.child.remove();
}
我将行指定为全局变量,因此它是永久性的。