【问题标题】:dataTables and sorting by date in IE8IE8中的数据表和按日期排序
【发布时间】:2013-03-15 16:29:18
【问题描述】:

在使用dataTables 排序日期字段(具有{"sType":"date"})时遇到一些问题。null 排序类型(它只是对数据进行排序,就好像它是一个纯字符串一样)在 IE8 中可以正常工作。

适用于 IE 9 和 10,以及最新版本的 Chrome、Safari、Firefox。这个应用程序没有在移动客户端上使用,所以我没有在那里测试。

IE8 有什么特别之处需要我研究吗?在 IE8 中的 JavaScript 控制台上没有错误,所以我有点不知道在哪里看。检查了dataTables 文档并搜索了 SO,但还没有找到任何 IE8 特定的内容。

更新:

这是我用来初始化数据表的 JavaScript。

//sprv results table
$("#sprv_report_table").livequery(function(){$(this).dataTable({
  "aoColumns": [{"sType":"date"},null,null,null,null,{"sType":"date"}],
  "iDisplayLength": 10, 
  "sPaginationType": "full_numbers"
});});1

由于数据表代码确实应用于表,并且我可以对其他列进行排序,因此我没有任何理由相信该事件没有被触发 - 似乎很明显它被浏览器。

【问题讨论】:

  • 当您尝试对日期列进行排序时,IE8 中的行为是什么?您使用的是美式 MM/dd/yyyy 日期吗?
  • 它突出显示列,但表条目的顺序没有改变。我刚刚意识到我有几个版本(1.7.4),所以我要先研究这个角度。
  • 所以,事实证明,即使是最新版本的数据表也有同样的问题。我已经用我用来初始化数据表的 javascript 更新了我的问题。
  • 该列中的 HTML 是什么样的?我想我仍然怀疑您使用的任何日期格式都是“非标准”的。我倾向于使用自定义 mData 进行排序

标签: sorting datatables


【解决方案1】:

试试这样的:

$(this).dataTable({
  "aoColumns": [{
    mData: function(data, type) {
       var realDate = Date.parse(data); //data will be a string
       switch(type) {
         case 'display':
            return realDate.toString('MM/dd/yyyy'); //note that this line needs to be implemented by you (however you format dates)
         default:
            return realDate;
       }
    }
   },null,null,null,null,{"sType":"date"}],
  "iDisplayLength": 10, 
  "sPaginationType": "full_numbers"
});

在此处查看mData 用法的参考:http://datatables.net/ref

整数 - 被视为数据源的数组索引。这是 DataTables 使用的默认值(每列递增)。

string - 从数据源读取对象属性。请注意,您可以使用 Javascript 点分表示法从数据源中读取深层属性/数组。

null - sDefaultContent 选项将用于单元格(默认为 null,因此您需要指定所需的默认内容 - 通常为空字符串)。这对于生成的列(例如编辑/删除操作列)很有用。

function - 只要 DataTables 需要设置或获取列中单元格的数据,就会执行给定的函数。该函数接受三个参数: {array|object} 行的数据源 {string} 请求的类型调用数据 - 设置数据时为“set”,收集数据时为“filter”、“display”、“type”、“sort”或未定义。请注意,当为 DataTables 期望获取对象的原始数据的类型提供 undefined 时

{*} 第二个参数为'set'时要设置的数据。

当 'set' 是调用类型时,函数的返回值不是必需的,否则返回值将用于请求的数据。

【讨论】:

  • 所以,基本上取日期并使用手写功能对其进行自定义排序。我会试一试,因为我遇到了其他怪癖,这可能是最直接的方法,希望不会对不同的浏览器产生不同的副作用。
  • 嗯,这就是我试图帮助您避免的。 DataTables /will/ 对一个真实的日期对象进行排序(例如realDate instanceof Date)。 DataTables 在排序时运行 mData 函数,因此它会知道将数据作为日期进行比较,而不是作为“字符串-看起来像日期”
  • 啊,我明白了,我看到了排序日期与看起来像日期的字符串之间的区别。原谅我一直以来的天真,但似乎我可以用mData: function(data, type) { return Date.parse(data); } 替换上面的函数——因为我的实验表明“显示”案例不是必需的。我在这种方法中缺少什么?
  • @normalocity:真的不是。就在它呈现返回的日期时,它可能是一些你不喜欢的丑陋格式(例如Fri Mar 15 2013 15:33:09 GMT-0500 (Central Daylight Time)),这就是为什么我(通常)将我的display 案例拆分为一个单独的案例(冗余.. ..对不起)。但这真的取决于你。您发布的内容肯定会起作用。
  • 澄清一下:DataTables 只是对返回值执行.toString()(如果我没记错的话),这就是返回值丑陋的原因,也是我建议某种格式的原因。如果您需要这方面的建议,我每天都会使用它,即使它有一段时间没有更新,它也非常强大。使用 .NET 样式格式规则masterdata.se/r/string_format_for_javascript
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多