我使用JSP脚本在网页上生成一个表,该脚本在给定列表的情况下解析值并生成表。对于每个名称参数,我的表需要有相同数量的行(示例中为2(,如下所示:
id name value1 value1
0 name1 12 13
1 name1 11 9
2 name2 14 2
3 name2 14 4
4 name3 12 5
5 name3 1 2
6 name4 12 1
7 name4 15 2
一旦jsp接收到包含其中一个名称的新列表元素,该表就需要删除接收到的名称中较早出现的部分,并添加新行。如果我们收到一个新的名称1列表,那么:
id name value1 value1
1 name1 11 9
8 name1 21 24
2 name2 14 2
3 name2 14 4
4 name3 12 5
5 name3 1 2
6 name4 12 1
7 name4 15 2
如果我们收到一个新的名称3列表,那么:
id name value1 value1
1 name1 11 9
8 name1 21 24
2 name2 14 2
3 name2 14 4
5 name3 1 2
9 name3 25 19
6 name4 12 1
7 name4 15 2
这是我的代码:
<table id="myTable">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>value1</th>
<th>value2</th>
</tr>
</thead>
<tbody>
<td>
<c:forEach items="${my_params}" var="param">
<td>${param.param}</td>
</c:forEach>
</td>
</tbody>
由于我是按名称分组的,所以我使用以下Datatable代码:
var group = $('tr.group');
var totalGroups = group.length;
var maxRows = totalGroups*2;
var groupColumn = 1;
$('#myTable thead th').unbind('click');
var table = $('#myTable').DataTable({
"columnDefs": [
{ "visible": false, "targets": groupColumn }
],
"order": [[ groupColumn, 'asc' ]],
"displayLength": 40,
"drawCallback": function ( settings ) {
var api = this.api();
var rows = api.rows( {page:'current'} ).nodes();
var last=null;
api.column(groupColumn, {page:'current'} ).data().each( function ( group, i ) {
if ( last !== group ) {
$(rows).eq( i ).before(
'<tr class="group"><td colspan="5">'+group+'</td></tr>'
);
last = group;
}
} );
if(table.rows().count() >= maxRows) {table.row(0).remove().draw()};
}
} );
使用这种方法,我永远不会删除旧的行,因为一旦我重新加载页面,它就会被删除。使用提供的代码,只要我重新加载页面,行就会被重新绘制。在某个阈值之后,一旦绘制出新的行,我如何删除旧的行?谢谢
我自己用一点变通方法解决了这个问题。基本上,一旦生成了表,我就调用一个函数来删除第一行(最旧的id(,这样用户就看不到任何内容,并且超过了阈值。
类似于此:
function deleteRow() {
var group = //get//group//names
var threshold = totalGroupLines
while(myTable.rows().count() >= threshold){
myTable.row(0).remove().draw();
}
}