1

我正在尝试链接特定列中的项目,但每个项目都将链接id到与 json 字符串不同的位置。不幸的是,我找不到使用 API 的方法(我知道有很多方法可以在不使用 API 的情况下做到这一点),但我正在寻找一种方法来链接列中的项目(每个带有特定链接id)。

所以这是我的代码,我用来getJSON从服务器获取 JSON,并将数据从这个 JSON 加载到表中,如下所示:

$.getJSON("http://url.from/method?parameter=foo&callback=?", function(data)
    {
        var total = 0;
        $("#table_body").empty();
        var oTable = $('#mytable').dataTable(
            {
                "sPaginationType" : "full_numbers",
                "aaSorting": [[ 0, "asc" ]]
            }); 

        oTable.fnClearTable();

        $.each(data, function(i, item) 
        {
            oTable.fnAddData(
                [
                    item.contact_name,
                    item.contact_email
                ]
            );
        });
    });

我想要做的是,对于每一行,将 链接contact_name到它的id,它也在 JSON 中,并且可以在这个$.each循环中使用item.contact_id.

有没有办法使用 DataTables API 来做到这一点,如果是的话,你能解释一下并提供一个很好的资源来帮助我吗?

OBS:我正在使用 JSONP

谢谢。


用我的新代码更新:

现在的错误是,当我点击时我得到了 id,但由于我正在处理$.each循环内的行,对于我点击的任何行,它总是会得到id最后处理的行。

var options = 
        {
            "sPaginationType" : "full_numbers",
            "aaSorting": [[ 0, "asc" ]],
            "aoColumns": [{
                "sTitle": 'Name',
                "sClass": "dtName",
            }, {
                "sTitle": 'Email',
                "sClass": "dtEmail",
            }, {
                "bVisible": false
            }],
        }

        var oTable = $('#table').dataTable(options); // Creates a new instance of the DataTable

        oTable.fnClearTable();

        $.each(data, function(i, item) 
        {

            oTable.fnAddData(
                [
                    item.contact_name , 
                    item.contact_email,
                    item.contact_id
                ]
            );

            var rowData = oTable.fnGetData(i); // fetch all the ids into this array
            $('#table tbody tr').click( function() 
            {
                window.location.href = "/panel/contacts/"+rowData[2];
            });
        });
4

1 回答 1

2

试试看:

var options = {
    "sPaginationType" : "full_numbers",
    "aaSorting": [[ 0, "asc" ]],
    "aoColumns": [{
        "sTitle": 'Name',
        "sClass": "dtName",
    }, {
        "sTitle": 'Email',
        "sClass": "dtEmail",
    }, {
        "bVisible": false
    }],
}
var oTable = $('#mytable').dataTable(options);

此表不会显示 id 列但您可以像以下代码一样获取它:

var rowData = oTable.fnGetData(rowNode);

或者

var rowData = oTable.fnGetData(0); // for the first one

console.log(rowData[0]);

您无法通过 jQuery 获取它,因为它没有显示出来。

编辑:对不起,我忘了一件事,当您使用 AddData 时,将 item.contact_id 放在第三位:

oTable.fnAddData([
    item.contact_name,
    item.contact_email,
    item.contact_id
]);

如果你想在点击事件上获取 id,请执行以下操作:

jQuery('#mytable tbody tr').live('click', function() {
    var selectedRow = oTable.fnGetData(this),
        url = "/yourUrl/" + selectedRow[2];

    window.location.replace(url);
});
于 2012-04-12T23:51:13.867 回答