Я использую таблицу с плагином jQuery dataTable. Когда я использую функцию fnAddData
она работает, за исключением случаев, когда таблица пуста. Затем я получаю эту ошибку:
Невозможно прочитать свойство "className" неопределенного
Вот как я добавляю свои данные:
$("#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)
});
})
jQuery не позволяет DataTables получать доступ к данным так, как он предпочитает. Чтобы дать ему узел, который он хочет, вам, вероятно, придется применить [0] или.get(0) к концу вашего объекта jQuery. На самом деле это то, что возвращает jQuery - объект - и, как правило, именно то, с чем вам удобно работать.
DataTables хочет узел.
Вот некоторые ссылки, которые показывают, что разработчик дает подсказки о том, как получить доступ к данным в разных обстоятельствах, - но с той же ошибкой во 2-й ссылке: здесь и здесь
Мораль этой истории заключается в том, что если 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:
Вот простой jsfiddle, который позволяет добавить строку в пустую таблицу: http://jsfiddle.net/7UZGM/
Так что же изменилось в вашей таблице? Когда вы говорите "пусто", у него все еще есть секция thead/tr/th и пустое тело? Они необходимы для правильной работы данных.
$('#dt').dataTable();
$('#btn').on('click',function() { addData(); });
function addData()
{
$("#dt").dataTable().fnAddData([
"col 1", "col 2", "col 3"]);
}