поместить атрибут данных в строку добавить в DataTables 1.10

Я динамически добавляю новую строку в DataTables 1.10.2, используя метод table.row.add(), используя этот код:

table.row.add([
    '',
    name,
    target_l,
    details,
    panel.html()    
]).draw();

Я произвел эту разметку:

<tr role="row" class="odd">
    <th>1 .</th>
    <td class="sorting_1">ID Fee</td>
    <td>All students</td>
    <td></td>
    <td>
        <button class="btn btn-null btn-xs" onclick="_remove(59, 'ID Fee')">
            <span class="fui-cross"></span>
        </button>
        <button class="btn btn-null btn-xs" onclick="_edit(59, 'ID Fee', '', '')">
            <span class="icon-pencil"></span>
        </button>
    </td>
</tr>

Что я хочу сделать, так это добавить data-id (и другие данные) атрибут к вновь добавленному тегу tr (во время или после вставки строки) и сделать что-то вроде это:

<tr data-id="59" role="row" class="odd">

Мне удалось получить индекс вновь добавленной строки с помощью кода, и он возвращает индекс последней строки:

var i = table.row.add([
    '',
    name,
    target_l,
    details,
    panel.html()    
]).index();

А также попытался выполнить следующее, чтобы добавить атрибут data-id, используя этот индекс:

var id = $("#department_id").val();
table.row(i).attr("data-id", id);
// table.row(i).data("id", id);
// I wanted to try this but there is also a method called data() already in
// DataTables so it will not work like in JQuery.

Я новичок в DataTables и уже прокрутил его исходный код, красные комментарии. Хотя не очень хорошо разбираюсь в его функциях, начинающихся с _fn*(). Если есть какой-то другой способ, не полагаясь на эти _fn*() функции, спасибо!


person Gideon    schedule 05.11.2014    source источник
comment
в вашем закомментированном коде вы говорите, что хотели сделать что-то вроде table.row(i).data("id",id);, но не можете, поскольку в DataTables есть функция data. Вы пытались обернуть table.row(i) в функцию jQuery, а затем вызвать для нее data jQuery?   -  person Blundering Philosopher    schedule 07.11.2014
comment
table.row(i) не является объектом jquery. Вы не можете ожидать, что функции data или attr будут работать с ним. Вам нужно сначала обернуть его в функцию jQuery, прежде чем вы сможете использовать другие функции $(table.row(i)).data("id", id);   -  person evolutionxbox    schedule 15.04.2015
comment
Вы когда-нибудь решали это, или это все еще открытая проблема?   -  person davidkonrad    schedule 25.04.2015
comment
Я еще не решил это. :-(   -  person Gideon    schedule 02.05.2015


Ответы (1)


Вы можете использовать API rows().nodes(). функцию, см. ниже:

var i = table.row.add([
    '',
    name,
    target_l,
    details,
    panel.html()    
]).index();

var id = $("#department_id").val();
table.rows(i).nodes().to$().attr("data-id", id);
person Gyrocode.com    schedule 01.05.2015
comment
Не знаю почему, но .to$() у меня не работает .node(). Пришлось использовать $( table.row(i).node() ) - person Felipe Leão; 25.05.2016
comment
@FelipeLeão, спасибо за комментарий. Похоже, что to$() работает только с nodes(), а не с node(), что недокументировано. Ваш обходной путь в порядке. - person Gyrocode.com; 25.05.2016
comment
.to$() превращает узел в элемент jQuery. - person mpemburn; 08.01.2017