使用 AJAX 的 DataTables 中的子行

Posted

技术标签:

【中文标题】使用 AJAX 的 DataTables 中的子行【英文标题】:Child rows in DataTables using AJAX 【发布时间】:2015-07-19 13:46:01 【问题描述】:

我正在尝试将子表与父表绑定。当子表的数据通过 AJAX 调用来创建动态表时,我无法弄清楚如何做到这一点。

我已关注this

下面是我的代码。

$('#myTable tbody).on('click', 'td.details-control', function () 

        var tr = $(this).closest('tr');
        var row = $('#myTable').DataTable().row(tr);

        if (row.child.isShown()) 
            // This row is already open - close it

            row.child.hide();
            tr.removeClass('shown');
        
        else 
            // Open this row

            row.child(format()).show();
            tr.addClass('shown');
        
    );

function format() 

    $.ajax(
        type: 'GET',
        url: '@Url.Action("MyFunction", "Home")',
        data:  "Id": MyId ,
        dataType: "json",
        async: false,
        success: function (data) 
            var list = data;
            $.each(list, function (index, item) 

                return '<table>.......<table />';

                //i need to loop across the list and create a dynamic table with tr and td


            );
        ,
        error: function (result) 
            var error = JSON.stringify(result);
            throw "Error...";
        
    );

【问题讨论】:

您是否尝试将这些新行添加到现有表中? 我添加了一些静态数据只是为了开始,它工作正常。但是,我正在从数据库中获取数据并且需要使用 AJAX 调用。我无法使用列表中的项目格式化dynamic table 我不会将行返回到另一个函数中,而是直接将它们添加到表中。 我已经关注了这个 - datatables.net/examples/api/row_details.html 这样想——你正在做的是试图在你点击按钮的地方抓取数据。数据表示例所做的是获取主表显示和详细信息部分所需的所有数据。您只是在单击时添加一个 div,其中包含您从 DataTables 数据模型中获取的元素。因此,放弃您的 ajax 调用,在初始查询中返回您需要的所有数据,然后单击,您只需显示已经存在的数据。 【参考方案1】:
$('#myTable tbody').on('click', 'td.details-control', function () 

    var tr = $(this).closest('tr');
    var row = $('#myTable').DataTable().row(tr);

    if (row.child.isShown()) 
        // This row is already open - close it

        row.child.hide();
        tr.removeClass('shown');
    
    else 
        format(row.child);  // create new if not exist
        tr.addClass('shown');
    
);

然后format() 将是

function format(callback) 
    $.ajax(
        .... 
        //async: false, you can use async 
        success: function (data) 
            var list = data;
            var html = '';
            $.each(list, function (index, item) 
                ...
                //create <tr> <td> with loop
                html= '<tr><td>.......</tr>';
            );
            callback($('<table>' + html + '</table>')).show();
        ,
        ...
    );

在这里演示jsfiddle

【讨论】:

任何小提琴供参考...??或任何可以作为示例的链接..?? 添加小提琴来回答 @JAG 看到了你的 jsfiddle。我想在 html 中包含 css 部分。怎么做? (我是网络新手)。请回答。 你可以像callback($('&lt;table class="some css class"&gt;' + html + '&lt;/table&gt;')).show();一样将css类添加到表中 本案例的最佳示例。非常有用的小提琴。非常感谢。

以上是关于使用 AJAX 的 DataTables 中的子行的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 的带有子行的闪亮数据表

jquery DataTables 父行和子行作为一条记录而不是两条记录发布到服务器

将输入值保存在子行中 - DataTables

SQLAlchemy:用新的子行更新版本化的父行会孤立旧的子行

具有 Vue 语法的 jQuery DataTables 子行

当我遍历父表中的行时,如何检索相关的子行?