当日期为 link 时,使用 moment.js 对日期进行排序不起作用
Sorting dates with moment.js does not work when date is a link
我正在使用 DataTables 1.10.5。当我尝试使用推荐的 moment.js
(根据 http://datatables.net/blog/2014-12-18)对日期进行排序时,认为工作正常:
http://jsfiddle.net/9gohzd9t/1/
但是,当我向该日期添加 link (a href
) 时,它会按 link 而不是日期排序:
http://jsfiddle.net/dnsL2oc4/1/
知道如何正确解决这个问题而不需要太多的黑客攻击吗?
问题出在datetime-moment.js的unshift方法上。 Moment
尝试将 <a href="12.html">12-01-2001</a>
转换为给定 "DD-MM-YYYY" 格式的有效日期,但显然不能。所以你必须从日期中删除 html ,可能使用这样的函数:
function strip(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
然后在unshift方法中剥离字符串(将datetime-moment.js替换为下面的代码):
$.fn.dataTable.moment = function (format, locale) {
var types = $.fn.dataTable.ext.type;
// Add type detection
types.detect.unshift(function (d) {
return moment(strip(d), format, locale, true).isValid() ?
'moment-' + format :
null;
});
// Add sorting method - use an integer for the sorting
types.order['moment-' + format + '-pre'] = function (d) {
return moment(strip(d), format, locale, true).unix();
};
};
我正在使用 DataTables 1.10.5。当我尝试使用推荐的 moment.js
(根据 http://datatables.net/blog/2014-12-18)对日期进行排序时,认为工作正常:
http://jsfiddle.net/9gohzd9t/1/
但是,当我向该日期添加 link (a href
) 时,它会按 link 而不是日期排序:
http://jsfiddle.net/dnsL2oc4/1/
知道如何正确解决这个问题而不需要太多的黑客攻击吗?
问题出在datetime-moment.js的unshift方法上。 Moment
尝试将 <a href="12.html">12-01-2001</a>
转换为给定 "DD-MM-YYYY" 格式的有效日期,但显然不能。所以你必须从日期中删除 html ,可能使用这样的函数:
function strip(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
然后在unshift方法中剥离字符串(将datetime-moment.js替换为下面的代码):
$.fn.dataTable.moment = function (format, locale) {
var types = $.fn.dataTable.ext.type;
// Add type detection
types.detect.unshift(function (d) {
return moment(strip(d), format, locale, true).isValid() ?
'moment-' + format :
null;
});
// Add sorting method - use an integer for the sorting
types.order['moment-' + format + '-pre'] = function (d) {
return moment(strip(d), format, locale, true).unix();
};
};