0

我正在使用带有 jquery dataTable 插件的表。当我使用该功能fnAddData时,它可以工作,除非表为空。然后,我收到此错误:

无法读取未定义的属性“类名”

这就是我添加数据的方式:

$("#table-1").dataTable().fnAddData([
            data[0],
            data[1],
            data[2],
            data[3],
            data[4],
            data[5],
            data[6],
            data[7],
            data[8],
            ]);

我对 fnDeleteRow 也有同样的问题,出现以下错误消息:

无法读取未定义的属性“nTr”

这是我的使用方法fnDeleteRow,当桌子不空时我没有问题......

$("#table-1").dataTable().fnDeleteRow(tr)

其中 tr 是一个选择器。

我错过了什么吗?

这是我的最后一行的 HTML 选项卡:

<table id="table-1" class="table table-hover table-nomargin table-colored-header        dataTable" aria-describedby="table-1_info">
<thead>
<tr role="row">
<th class="sorting" role="columnheader" tabindex="0" aria-controls="table-1" rowspan="1" colspan="1">Pays</th>
</tr>
</thead>
<tbody role="alert" aria-live="polite" aria-relevant="all">
<tr class="odd">
<td class=" sorting_1">
<div id="address23name">test</div>
</td></tr></tbody></table>

这是我的 JS

$("#deleteAddressButton").click(function(){
    var id = $("#deleteAddressId").val();
    $.post("/Contacts/deleteAddress",
            {data: id}, function(data) {
          var id = $.parseJSON(data);
          var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
          $("#table-1").dataTable().fnDeleteRow(tr)
        });
})
4

2 回答 2

0

jQuery 不允许 DataTables 以它喜欢的方式访问数据。为了给它它想要的节点,您可能需要将 [0] 或 .get(0) 应用到 jQuery 对象的末尾。这实际上是 jQuery 返回的——一个对象——并且通常正是您愿意使用的。

DataTables 需要一个节点。

以下是一些链接,向开发人员展示了如何在不同情况下访问数据的提示——但在第二个链接中存在相同的错误: herehere

这个故事的寓意是,如果 DataTables 需要一个表“节点”,您需要做一些额外的工作来删除它所在的额外 jQuery 容器。

因此,您的代码看起来像这样,我相信应该处理您的错误情况。否则,请务必在 DataTables.net 上搜索您的错误和函数名称。该论坛非常活跃且乐于助人。

var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
$("#table-1").dataTable().fnDeleteRow(tr[0])

或者

var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
$("#table-1").dataTable().fnDeleteRow(tr.get(0))

或者,当然,将它添加到您冗长的$("tr:has...)陈述的末尾。

选项 2:

于 2013-11-08T15:49:18.180 回答
0

这是一个简单的 jsfiddle,它允许您向空表添加一行:http: //jsfiddle.net/7UZGM/

那么你的桌子有什么不同呢?当您说“空”时,它是否仍然有一个 thead/tr/th 部分和一个空的 tbody 部分?这些是数据表正常工作所必需的。

$('#dt').dataTable();

$('#btn').on('click',function() { addData(); });

function addData()
{
    $("#dt").dataTable().fnAddData([
            "col 1", "col 2", "col 3"]);
}
于 2013-11-07T18:52:36.193 回答