我有一个带有两级行分组的jquery数据表。如果我搜索表中的任何内容,它会正确搜索数据,但会删除所有分组或将所有搜索到的数据合并到一个组中。
我尝试过在互联网上找到的大部分内容,但没有一个是有用的。
这是我的代码:
drawCallback: function ( settings ) {
var api = this.api();
var rows = api.rows( {page:'all'} ).nodes();
var last = null;
var sublast = null;
var grupo;
var total = null;
var subtotal = null;
var a_origen = null;
var intVal = function ( i ) {
return typeof i === 'string' ? i.replace(/[\$,]/g, '_')*1 :
typeof i === 'number' ? i : 0;
};
api.column(0, {} ).data().each( function ( ctra, i ) {
ctra_assoc = ctra.substring(0, 6);
if (last !== ctra) {
$(rows).eq( i ).before(
'<tr class="group" height= "50px"><td colspan="5">'+ctra.toUpperCase()+'</td><td colspan="2" class="'+ctra_assoc+'"></td></tr>'
);
total = intVal(api.column(8).data()[i]);
last = ctra;
} else {
total += intVal(api.column(8).data()[i]);
}
$("."+ctra_assoc).html(total.toFixed(2));
a_origen += intVal(api.column(8).data()[i]);
grupo = api.column(1).data()[i];
grupo_assoc = grupo.replace(/\s/g, "_");
if (sublast !== grupo) {
$(rows).eq( i ).before(
'<tr class="subgroup" height= "50px"><td colspan="5">'+grupo+'</td><td colspan="2" class="'+ctra_assoc+'_'+grupo_assoc+'"></td></tr>'
);
subtotal = intVal(api.column(8).data()[i]);
sublast = grupo;
} else {
subtotal += intVal(api.column(8).data()[i]);
};
$("."+ctra_assoc+'_'+grupo_assoc).html(subtotal.toFixed(2));
} );
$(".panel-title").html('Listado de operaciones ejecutadas | Total a origen: '+a_origen.toFixed(2)+' €');
https://jsfiddle.net/mvwf3qwm/3/
我曾尝试过一些案例,例如:
如果我搜索代码12512,结果就可以了。
如果我搜索代码12411,那么我将失去“第一级分组”。
如果我搜索代码22314,则所有分组都将丢失。
当您要求与名为groups的行分开的行时,它似乎失败。
我的代码有什么问题吗?
答案 0 :(得分:0)
将{page:all}
更改为{page: current}
。
这里的问题是当您按'22314'过滤,rows
进行迭代时,包含示例中的所有(16)行,并将分组添加到第一行(,即现在隐藏,过滤后)这就是为什么你看不到你的分组。
您需要遍历已过滤的行,这就是您应该应用{page: current}
工作示例:https://jsfiddle.net/mvwf3qwm/4/
参考文档:
https://datatables.net/reference/type/selector-modifier#page https://datatables.net/examples/advanced_init/row_grouping.html