TypeError: $.fn.dataTable.moment is not a function
TypeError: $.fn.dataTable.moment is not a function
我正在使用jquery DataTable插件,在我的一个表格中,我想根据日期时间列对结果进行排序。所以,我包含了moment.js版本2.13.0,我的dataTable版本是1.10.10,我的jQuery版本是1.9.1。\n根据这篇最新的dataTable日期时间排序插件文章https://datatables.net/blog/2014-12-18的建议,我尝试了以下方法,但是在控制台中我得到了如下错误:\n
TypeError: $.fn.dataTable.moment不是一个函数 $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss');
\n在我的html页面中,\n
$(document).ready(function() { $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss'); $('#myTable').DataTable(); });
\n我的日期列数据的格式为09-May-2016 19:38:00
。我已经交换了在我的html页面中包含dataTable和moment.js插件源代码的顺序,但是我仍然得到相同的错误。可能是什么问题?
问题原因:浏览器缓存问题,导致JS文件没有正确下载到浏览器,从而引发了该问题。
解决方法:清除浏览器缓存并使用CDN版本的文件。
以下是解决后的工作代码,供将来参考使用:
JS导入:
DataTable初始化:
$(document).ready( function () { $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss'); $('#jobcardsTable').DataTable({ responsive: true, "order": [[ 2, "desc" ]] }); });
当datatable加载时,使用moment.js解析第三列中的自定义日期格式,并按降序排序。
你的表格是否应用了这个格式?对我来说没有起作用。
我的代码(不起作用):
$('#tblResults').dataTable({ "columnDefs": [ { targets: [5, 6], render: $.fn.dataTable.moment("DD.MM.YYYY") } ] });
对我来说,它工作正常。你能否创建一个jsfiddle演示你的代码,或者提一个新的问题并在这里提供链接?
对我来说,它工作正常。可以查看我根据你的fiddle创建的这个fiddle链接:jsfiddle.net/kn8xu10w/4。日期列会自动按降序排序。如果你想按升序排序,请将值更改为asc
。重要的是确保datatables版本是1.10.x
。即使不格式化日期,它也可以工作。
是的,排序工作正常,谢谢你提供的fiddle。也许你知道如何将日期列的格式更改为DD.MM.YYYY吗?
你可以参考这个链接:stackoverflow.com/questions/11591854/...,它应该会有所帮助。
再次感谢你。格式化日期不是问题,我的唯一问题是如何在jquery datatable中格式化日期。我不知道如何做到这一点...我以为你的解决方案不仅可以排序,还可以格式化日期。
我上面的代码只是对datatable列按日期格式进行排序,而不是格式化日期。你应该在渲染引擎或服务器端进行格式化。
TypeError: $.fn.dataTable.moment is not a function 这个问题的出现原因是没有正确加载moment.js和datetime-moment.js两个文件,或者加载的顺序不正确。
解决方法是按照以下顺序加载文件:
1. 首先加载moment.min.js文件;
2. 然后加载DataTables;
3. 最后加载DataTables + Moment插件。
正确的加载顺序可以确保$.fn.dataTable.moment函数能够正确调用,从而避免出现TypeError: $.fn.dataTable.moment is not a function的错误。