[英]Jquery Datatables - custom filtering for last element of group of Ids with checkbox
我在jquery数据表中有看起来像下面的数据
Id Revision
-----------------
123400 | 01
123401 | 04
123402 | 09
456789 | 00
456790 | 05
-----------------
现在,用户需要一个复选框,该复选框过滤数据表以仅显示一组ID(按前4个字符分组)在表中的最后一个条目。 这应该是过滤上表的结果
Id Revision
-----------------
123402 | 09
456790 | 05
-----------------
ID按“ 1234”和“ 4567”分组,并显示最后一个条目。
因此,我从服务器获取了所有数据,并构建了一个包含上面第二个表的数据的新数组:
var lastIndex;
var lastRev;
var newData = [];
var n = 0;
for (var k = 0; k < data.length; k++)
{
// if new ID is unknown and new Rev is unknown, fill newData and count up
if (data[k][0].indexOf(lastIndex) < 0 && data[k][1].indexOf(lastRev) < 0) {
newData[n] = data[k];
n++;
}
else // else overwrite last element
{
newData[n - 1] = data[k];
}
lastIndex = data[k][0].substring(0, 4);
lastRev = data[k][1];
}
现在出现无法正常工作的部分
$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {
var checked = $('#myCheckbox').is(':checked');
if (checked)
{
for (var i = 0; i < newData.length; i++)
{
if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
{
return true;
}
else
{
return false;
}
}
}
else
{
return true;
}
}
var oTable = $('#myTable').dataTable();
$('#myCheckbox').on("click", function (e) {
oTable.fnDraw();
});
这仅返回第一个元素,其ID为“ 123402”,版本为“ 09”。 但是我希望它能如上面第二张表所示显示。
我做错了什么,或者我在这里想念什么? 任何帮助,将不胜感激
预先感谢您,查理H。
问题:问题在于逻辑的这一部分。
for (var i = 0; i < newData.length; i++)
{
if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
{
return true;
}
else
{
return false;
}
}
它有一个return语句,它将永远不会超过第一次迭代 。 这就是您仅获得一行的原因。
解决方案:您必须删除for
循环中的else
部分。 像下面
for (var i = 0; i < newData.length; i++)
{
if ((aData[0] == newData[i][0]) && (aData[1] == newData[i][1]))
{
return true; // if record found return true immediately;
}
// if not found wait for next loop, we need to make sure we
//complete the loop before deciding the data not found.
}
return false; // Now since we are out of the loop its obvious that
//we didnt find the record.
希望这可以帮助..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.