【问题标题】:Specify sType of Datatable based on class根据类指定Datatable的sType
【发布时间】:2013-06-24 16:34:35
【问题描述】:

我正在使用一个模板,它有一个很好的功能,即所有带有 class="datatable" 的表都被转换为 jQuery 数据表:

$(".datatable").dataTable();

现在,我在表格中放入了不同类型的数据,并注意到货币和百分比列是按文本排序的,而不是按数字排序的。我添加了用于按货币和百分比排序的插件 (see here),但它们没有被应用 - 我怀疑是因为在初始化表时,我仍然需要设置这些列的 sType。

我想做一些类似于asked here 的事情 - 即,在标签中为我需要覆盖的少数列指定 sType。但是,由于我使用的是类而不是 ID 来应用函数,我该如何修改建议的解决方案,它会扫描 sType 属性,以根据类的特定实例进行查找?

$(".datatable").each(function() {
    var aoColumns = [];
    $(this).children("th").each(function() {
        var sType = $(this).getAttribute("data-sType");
        aoColumns.push(sType ? { "sType" : sType } : null);
    });
    //$(this).dataTable();
    $(this).dataTable(
            {
                "aoColumns" : aoColumns
            }
        );
});

我遇到的问题是,当我使用 aoColumns 选项运行它时,我不断收到错误 Cannot read property 'asSorting' of undefined,但如果我在没有选项的情况下运行它,它可以工作(减去排序功能)。

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    这是一个解决问题的尝试:

    http://jsbin.com/ewinep/1
    对“价格”列进行排序以查看实际情况。

    http://jsbin.com/ewinep/1/edit
    问题的核心在于下面创建数据表的 javascript。

    $(".some-table").each(function(i, v) {
        var aoColumns = []; 
        $(this).find("thead th").each(function() {
          var sType = $(this).data("stype"); // lowercase!
             aoColumns.push(sType ? { "sType" : sType } : null);
        });
       $(this).dataTable({ "aoColumns": aoColumns }); 
    }); 
    

    请注意,我将每个表的类名 .datatable 更改为 .some-table(并不是说它有任何区别 - 只是厌倦了看到同名的 css 类名和 javascript 函数)。

    顺便说一句,你有没有尝试在$(this).children("th").each(function() {下面做一个console.log()
    查看是否有任何代码在嵌套的.each中执行?

    【讨论】:

    • 实际上,问题似乎是我从内部 each() 语句中获取了一组值 - 一旦我考虑到这一点,它就解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2019-10-09
    • 2019-12-14
    相关资源
    最近更新 更多