Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery数据表按行内集合排序_Jquery_Datatables - Fatal编程技术网

jQuery数据表按行内集合排序

jQuery数据表按行内集合排序,jquery,datatables,Jquery,Datatables,我有一个用manual/API/任何带有组集之类的东西创建的数据表。有人能帮忙吗 我不喜欢当前的结构,我可以随心所欲地操纵它,只要它保持每行分组集的“外观”。这有两个部分。较大的是自定义排序,其次是较小的排序,用于检测是按第一个div还是第二个div排序 Datatables提供了一些自定义排序插件的文档,但是通过查看它们的特性,很容易创建自己的插件。基本上,我在这里做的是创建一个名为“div toggle”的自定义排序插件 对于我提出的解决方案,将类添加到数据中的div中是最简单的,如下所示:

我有一个用
manual/API/任何带有组集之类的东西创建的数据表。有人能帮忙吗


我不喜欢当前的结构,我可以随心所欲地操纵它,只要它保持每行分组集的“外观”。

这有两个部分。较大的是自定义排序,其次是较小的排序,用于检测是按第一个div还是第二个div排序

Datatables提供了一些自定义排序插件的文档,但是通过查看它们的特性,很容易创建自己的插件。基本上,我在这里做的是创建一个名为“div toggle”的自定义排序插件

对于我提出的解决方案,将类添加到数据中的div中是最简单的,如下所示:

 <td>
    <div class="firstDiv">USA</div>
    <div class="secondDiv">Canada</div>
 </td>
我在这里讨论的方式是,“firstDiv”是一个布尔全局变量,它告诉插件在排序时是使用第一个div还是第二个div。您可以将事件侦听器应用于正在单击的标头以切换此值:

$('.dataTable').on('click', 'thead tr th:eq(0)', function () {
    if (firstDiv) firstDiv = false;
    else firstDiv = true;
});
要告诉dataTables在特定列上使用此排序插件,请在初始化时将声明添加到“columns”属性中:

$(...).DataTable(
    { 
        "columns" : [ {"orderDataType": "div-toggle"} ]
    }
);
这将用于将此排序插件应用于只有一列的dataTable,只是为了让您了解如何使用它


请注意:毫无疑问,在我的示例代码中,您可以使用更好的选择器,这可能是一种更有效的排序解析方法,但这段代码应该可以工作,并为您提供了一个良好的基础,让它工作得更好。

我现在没有时间深入研究,但是DataTables网站上的几个链接可能会对我有所帮助,但我以前没有注意到:,@Adam Aweasome,谢谢你,我会研究这些链接,如果我找到答案,我会发布一个答案(相信你:D)
$.fn.dataTable.ext.order['div-toggle'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        var cellData;
        if (firstDiv) cellData = $($(td).html()).find('.firstDiv').text();
        else cellData = $($(td).html()).find('.secondDiv').text();
        return cellData;
    });
}
$('.dataTable').on('click', 'thead tr th:eq(0)', function () {
    if (firstDiv) firstDiv = false;
    else firstDiv = true;
});
$(...).DataTable(
    { 
        "columns" : [ {"orderDataType": "div-toggle"} ]
    }
);