如何用 jQuery 中的 dataTables 替换标准引导表?

Posted

技术标签:

【中文标题】如何用 jQuery 中的 dataTables 替换标准引导表?【英文标题】:How to replace standard bootstrap table with dataTables in jQuery? 【发布时间】:2020-06-30 13:02:20 【问题描述】:

我已经尝试并搜索了很多解决方案,但没有解决我的问题,即使在 dataTables 网站上也是如此。问题是如何使用 DataTables 在 json 中显示嵌套数组?下面的例子,如果我只想显示l3_id: "1" 数据怎么办。

我试图理解这个链接,但并不真正理解。 Example

控制台和网络选项卡没有错误。

DataTable 不出现,包括搜索框、分页等dataTables 功能。 (CDN/库已导入)

JSON


    "data": [
        
            "project_id": "1",
            "l1_task": [
                
                    "l1_id": "1",
                    "l2_task": [
                        
                            "l2_id": "1",
                            "l3_task": [
                                
                                    "l3_id": "1",
                                    "l3_name": "My name"
                                
                            ]
                        
                    ]
                
            ]
        
    ]

JS(我在JS中应用HTML)

"<table id='Layer3Table' class='table dt-responsive nowrap' style='width:100%'>"+
    "<thead>"+
        "<tr>"+
            "<th class='text-center'>ID</th>"+
            "<th class='text-center'>Activity Name</th>"+
        "</tr>"+
    "</thead>"+
"</table>"+

$('#Layer3Table').DataTable(
    ajax:  
        url: url_project_detail",
        dataSrc : "data"
    ,
    columns: [
         data : "l1_task.0.l2_task.0.l3_task.0.l3_id" ,
         data : "l1_task.0.l2_task.0.l3_task.0.l3_name" ,
    ],
);

【问题讨论】:

【参考方案1】:

要么定义你的表格,包括 html 中的所有tbody 内容,然后使用 DataTables 来启用搜索等功能。如果您这样做,则无需设置 url 或列(尽管您仍然可以设置其他选项)。

$('#Layer3Table').DataTable();

或者如果你想利用 url 和 column 特性,在 HTML 中创建基本的表结构

<table id='Layer3Table' class='table dt-responsive nowrap' style='width:100%'>
    <thead>
        <tr>
            <th class='text-center'>Project ID</th>
            <th class='text-center'>Project Name</th>
            <th class='text-center'>Project Description</th>
            <th class='text-center'>Project Status</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

然后在 javascript 中单独设置您的 DataTable。

$('#Layer3Table').DataTable( 
    ajax:  
        url: url_project_detail,
        crossDomain : true,
        type : "POST",
        cache : false,
        dataType : "json",
        contentType: "application/json",
        dataSrc : "data",
    ,
    columns: [
         data : "l3_id", "className": "text-center" ,
         data : "l3_name", "className": "text-center" ,
         data : "l3_description", "className": "text-center" ,
         data : "l3_status", "className": "text-center" 
    ],
);

您似乎在做的是循环您的结果并为每个结果创建一个 DataTable,这就是它不理解的原因。

【讨论】:

我已经尝试了您的第二个选项,但我将 HTML 放在 JS 中,就像我上面的帖子一样,并在 JS 中使用 dataTables(根据您的建议)。所以我没有使用 。但是, 中的内容出现在 UI 中但没有出现数据,控制台日志中没有错误。 只是为了通知我在 json 中有多个嵌套数组。例如data: ['l1_task : ']['l2_task : ']['l3_task : '] 之后将达到[l3_id, l3_name, l3_description......] 我认为您需要将希望 DataTables 使用的数组命名为 "data" as it is in this example(单击表格下方的 Ajax 选项卡),或者使用 dataSrc 设置源DataTables 设置中的 ajax 对象中的属性 - example。 我都试过了,但没有解决。 :-( @mastersuse 您能否用您如何定义 dataSrc 和返回的数据样本更新问题(如果需要,更改敏感细节)?还要检查您是否确实以您期望的方式接收到来自服务器的响应。打开浏览器控制台并选择网络选项卡。触发 DataTables 请求(重新加载页面、单击按钮或其他),在 Network 选项卡中查找 Ajax 请求 URL,选择它,右侧的响应中应该是您的 JSON 数据。

以上是关于如何用 jQuery 中的 dataTables 替换标准引导表?的主要内容,如果未能解决你的问题,请参考以下文章