2

我正在使用一个模板,它具有一个很好的特性,即所有带有 class="datatable" 的表都变成了 jQuery 数据表:

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

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

我想做一些类似于这里要求的事情- 即,在标签中为我需要覆盖的少数列指定 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
            }
        );
});

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

4

1 回答 1

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 }); 
}); 

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

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

于 2013-06-25T04:42:10.573 回答