如何在jQuery数据表中按值查找特定行?

时间:2016-07-15 09:23:12

标签: jquery datatables

我想在模态窗口中的数据表表中找到一个特定的行值。 我正在查看https://datatables.net/reference/type/row-selector,但据我所知,这一切都基于选择器或内部ID。 在我的情况下,我有2列,我希望能够在ajax请求后查找特定行以更新记录。

success: function (data) {
                if (data.status_id > 0) {
                    alert(data.info);
                } else {
                    alert(data.info);
                }
                contractsTable.row.add(dataJSON).draw(false);
         }

修改

现在我的代码 - 我已经构建了自己独特的rowid并使用了selector by id

检索数据对象

...
var d = datatable.row(this).data();
... set form values and so on

保存并刷新数据表

$('#contractEditSave').on('click', function (e) {

        dataJSON = {
            id: $('#contractEditForm').data('contractid'),
            member_id: $('#contractEditForm').data('memberid'),
            member_name: $('#contractEditModalTitle').text(),
            box_id: $('#contractBox').val(),
            name: $('#contractName').val(),
            description: $('#contractDescription').val(),
            start: $('#contractStart').val(),
            end: $('#contractEnd').val(),
            amount: $('#contractAmount').val(),
            unit: $('#contractUnit').val(),
            max: 1
        };

        $.ajax({
            type: 'POST',
            url: '/save',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (data) {
                if (data.status_id == 0)
                    datatable.row('#' + dataJSON.id).data(dataJSON); //if update
                    ...
                } else {
                    datatable.row.add(dataJSON).draw(false); //if insert
                    ...
                }



                $("#contractEditModal").modal('hide');

            }
        });
    });

2 个答案:

答案 0 :(得分:5)

您可以使用fnFindCellRowIndexes查找包含特定列中某些数据的行索引。

然后,您可以使用cell().data() API方法更新单元格。

<Row>
    <Cell ss:StyleID="s62"><Data ss:Type="DateTime"><% if objrs("DateCol")  <> #01/01/1902# then Response.write fncFormatDateXML(objrs("DateCol")) else response.write "" end if %></Data></Cell>
</Row>

请注意,除了jQuery DataTables CSS / JS文件外,还需要包含var table = $('#example').DataTable(); var rowId = $('#example').dataTable() .fnFindCellRowIndexes('Angelica Ramos', 0); table .cell(rowId, 0) .data('Angelica Ramos (UPDATED)') .draw(false);

请参阅this jsFiddle以获取代码和演示。

答案 1 :(得分:0)

我发现fnFindCellRowIndexes插件的运行速度令人难以置信,因为它在每个单元格上都调用fnGetData,这本身就是一个可怕的CPU。答案实际上要简单得多,运行速度要快几个数量级。每列或整个表的data()在您请求时已按排序后的列进行排序。因此,从字面上看,您要做的就是请求column(c).data()并遍历该数组以查找所需内容,索引将与当前排序的行号匹配。在Typescript中,基本上就像这样:

public findRows(s:string,col:number):number[] {
    let r:number[] = [];
    let dat:any = $('#example').DataTable().column(col).data();
    let len:number = dat.length;
    for (let k=0;k < len;k++) {
        if ((<string>dat[k]).toLowerCase().includes(s.toLowerCase())) r.push(k);
    }
    return r;
}