类型错误:$.fn.dataTable.moment 不是函数

Posted

技术标签:

【中文标题】类型错误:$.fn.dataTable.moment 不是函数【英文标题】:TypeError: $.fn.dataTable.moment is not a function 【发布时间】:2016-09-04 05:40:00 【问题描述】:

我正在使用 jquery DataTable 插件,在我的一张表中,我想根据日期时间列对结果进行排序。所以,我包含了 moment.js 版本 2.13.0,我的 dataTable 版本是 1.10.10,我的 jQuery 版本是 1.9.1。

正如最新的dataTable日期时间排序插件文章https://datatables.net/blog/2014-12-18中所建议的,我尝试了以下但在控制台中我有

TypeError: $.fn.dataTable.moment is not a function
$.fn.dataTable.moment('DD-MMM-Y HH:mm:ss');

在我的 html 页面中,

$(document).ready(function() 
    $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss');
    $('#myTable').DataTable();
 );

我的日期列数据具有这种格式的日期,09-May-2016 19:38:00。我已经交换了 dataTable 和 moment.js 插件源包含在我的 html 页面中的顺序。但我仍然得到同样的错误。可能是什么问题?

【问题讨论】:

您是否按照您链接的文章中的建议导入了日期/时间排序插件?您必须导入://cdn.datatables.net/plug-ins/1.10.11/sorting/datetime-moment.js @VincenzoC 是的,我也尝试添加该 js。我尝试在本地也包括 CDN 版本。我收到相同的错误消息 【参考方案1】:

导入脚本的顺序很重要。 您必须在排序插件之前包含数据表。以下对我有用:

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
<script src="//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script src="//cdn.datatables.net/plug-ins/1.10.12/sorting/datetime-moment.js"></script>

【讨论】:

【参考方案2】:

以下两个文件是必需的;

moment.min.js,和 datetime-moment.js

请按以下顺序加载所有文件:

瞬间, 日期表, DataTables + Moment 插件。

【讨论】:

【参考方案3】:

浏览器缓存问题。我包含的 JS 文件未正确下载到导致问题的浏览器中。我清除了缓存并使用了 CDN 版本。它工作得很好。 如果将来有人需要,这是我的工作代码,

JS 导入:

<script th:src="@/js/jquery-1.8.3.js" />
<script th:src="@/js/jquery.datatables.min.js" />
<script th:src="@//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js" />
<script th:src="@//cdn.datatables.net/plug-ins/1.10.11/sorting/datetime-moment.js" />

数据表初始化:

$(document).ready( function () 

    $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss');

    $('#jobcardsTable').DataTable(
        responsive: true,
        "order": [[ 2, "desc" ]]
    );

);

因此,当最初加载数据表时,使用 moment.js 从第三列解析自定义格式化日期并按降序排序。

【讨论】:

表格是否应用了格式?对我来说它不起作用。 我的代码(不工作): $('#tblResults').dataTable( "columnDefs": [ targets: [5, 6], render: $.fn.dataTable.moment( "DD.MM.YYYY") ], @FrenkyB 它对我来说很好用。您能否为您的代码或一个新问题制作一个 jsfiddle 演示并将其链接到此处? @FrenkyB 再次,对我来说很好。检查这个小提琴,我现在根据你的小提琴创建,jsfiddle.net/kn8xu10w/4 日期列自动按降序排序。如果要按升序排序,请将值更改为 asc。重要的是你应该确保数据表版本是1.10.x。即使没有格式化日期也可以工作。 是的,排序工作,感谢小提琴。也许您知道如何将日期列的格式更改为 DD.MM.YYYY ?

以上是关于类型错误:$.fn.dataTable.moment 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

js错误类型

js常见错误类型

错题本上的常见错误类型及改正方法

Flutter fromJson - 未处理的错误未处理的错误类型'String'不是'int'类型的子类型发生在实例中

我在尝试登录或注册时收到错误消息“错误类型‘AuthResult’不是类型转换中‘FirebaseUser’类型的子类型”

ASP.NET MVC前台解析JSON时,类型错误