数据表搜索和排序不适用于动态添加的数据

Posted

技术标签:

【中文标题】数据表搜索和排序不适用于动态添加的数据【英文标题】:DataTables Searching and Sorting not working for dynamically added Data 【发布时间】:2016-11-14 03:56:05 【问题描述】:

我有一个 DataTable,我需要从 AJAX 调用动态插入/追加数据。对这种 DataTable 进行搜索和排序似乎没有按预期工作。这是我的JSFiddle

代码:

$('#example').DataTable( 
       "iDisplayLength": 10,
        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
        "aaData": md,
        "aaSorting": [[1, 'asc']],
        "createdRow": function (row, data, index) 
                $('td', row).eq(0).append('<u><a target="_blank" href="' + data["Data"][0].Link + '">' + data["Data"][0].Value + '</a></u>');
                $('td', row).eq(1).append(data["Data"][1].Value);
                $('td', row).eq(1).prop('title', data["Data"][1].Value);
                for (var i = 2; i < data["Data"].length; i++) 
                    if (data["Data"][i].Value == "green") 
                        $('td', row).eq(i).addClass('highlight1');
                        $('td', row).eq(i).append(data["Data"][i].Value);
                    
                    else if (data["Data"][i].Value == "red") 
                        $('td', row).eq(i).addClass('highlight3');
                        $('td', row).eq(i).append(data["Data"][i].Value);
                    
                    else if (data["Data"][i].Value == "blue") 
                        $('td', row).eq(i).addClass('highlight2');
                        $('td', row).eq(i).append(data["Data"][i].Value);
                    
                    else
                        $('td', row).eq(i).append(data["Data"][i].Value);
                    
              
        ,
        "scrollX": true,
        "scrollCollapse": true,
        "fixedColumns": 
           "leftColumns": 2,

        ,
        "sScrollXInner": "150%",
        "fixedHeader": true,
        "columnDefs": [
            "defaultContent": "",
            "targets": "_all",
            "data": null,
            "render":  
              //  "_":spData[0].Cells[2].Value,
            
        ],
     );

对此问题有任何解决方案或想法吗?

【问题讨论】:

【参考方案1】:

我不相信createdRow 正在做你想做的事。根据数据表documentation:

此回调在创建 TR 元素时执行(并且所有 TD 子元素都已插入),或者如果使用 DOM 源进行注册,则允许对 TR 元素进行操作。

createdRow 正在渲染您的 &lt;td&gt; 子元素,并且搜索和排序功能不知道它们的存在。

如果要在 DataTable() 初始化后添加行,则应改为使用 row.add()。有关它的更多信息可以在 DataTable doucmentation 中找到。但这里是更新的JSFiddle,基于您使用row.add() 将您的行添加到表中的原始链接,现在允许搜索和排序对其进行处理。

【讨论】:

谢谢@Jeremy Southard!该解决方案对我有用!

以上是关于数据表搜索和排序不适用于动态添加的数据的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序不适用于对 C++ 中的动态对象数组进行排序

如何将自动完成添加到动态添加的输入字段?自动完成功能不适用于动态添加的输入字段

.validator('update') 不适用于动态添加的字段

点击事件不适用于动态添加的按钮

jquery append() 不适用于动态添加的元素

jquery sortable不适用于动态添加的项目