我有以下代码:
$.extend($.fn.dataTableExt.oSort, {
"datetime-uk-pre": function (a) {
from = a.split(' ');
var ukDatea = from[0].split('/');
var ukTimea = from[1].split(':');
return (ukDatea[2] + ukDatea[1] + ukDatea[0] + ukTimea[1] + ukTimea[0]) * 1;
},
"datetime-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"datetime-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
$.extend($.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
我读到了有关延伸但仍然不明白它在做什么。有人可以帮忙解释一下。我正在寻找的是尽可能简单的解释。我也可以用某种方式组合这两个代码块。
这是为数据表提供不同排序方式的代码。但这是什么意思:
$.fn.dataTableExt.oSort
答案 0 :(得分:5)
DataTables
在基础包中提供了几个sorting选项。您正在查看的那个名为Type based column sorting,它基本上会尝试根据类型对列进行排序。 DataTables已经为最常见的类型提供了默认排序函数,例如Date
,Numeric
和HTML
。这些属性在名为oSort
的对象中注册为属性,可以使用$.fn.dataTableExt.oSort
访问。该对象如下所示:
oSort = {
"string-pre": function ( a ) {
// ...
},
"numeric": function ( a ) {
// ...
}
}
但是,如果您需要自定义类型的自定义排序功能,则可以通过向oSort
添加其他键或属性来扩展oSort
对象。对象
例如,要添加名为date-uk-pre
的新类型,您可以使用:
$.fn.dataTableExt.oSort['date-uk-pre'] = function ( a ) {
// ...
}
也就是说,您使用名为oSort
的新属性扩展 date-uk-pre
。 jQuery的 $.extend()
只不过是这个的捷径。不是手动为每个新类型添加每个属性,而是传递一个新对象,其中包含所有新类型(例如date-uk-pre
,datetime-uk-pre
和jQuery 合并现有的oSort
对象,通过新功能有效地扩展它。您甚至可以将$.extend()
组合成一个:
$.extend($.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
},
"datetime-uk-pre": function (a) {
from = a.split(' ');
var ukDatea = from[0].split('/');
var ukTimea = from[1].split(':');
return (ukDatea[2] + ukDatea[1] + ukDatea[0] + ukTimea[1] + ukTimea[0]) * 1;
},
"datetime-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"datetime-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
答案 1 :(得分:1)
var m1 = {'a':'a','b':'b'};
var m2 = {'c':'c','d':'d'};
var m3 = {'e':'e','f':'f'};
$.extend(m1,m2,m3);
console.log("m1:");
console.log(m1);
//Result :
//m1:
//{'a':'a','b':'b','c':'c','d':'d','e':'e','f':'f'};
另外,对于一个argumnt:
$.extend(m1)
相当于
$.extend($, m1);
或
jQuery.extend(jQuery, m1);
所以jQuery会被扩展。然后jQuery将在我上面的特定示例中包含两个附加属性:'a':'a'和'b','b'。所以$ .a会返回'a'。
有关详细信息,请参阅http://api.jquery.com/jQuery.extend/。
答案 2 :(得分:1)
extend函数将第二个参数中定义的属性添加到第一个参数中的对象。通常它用于向插件添加更多功能,就像在上面的代码中一样。上面的代码为$.fn.dataTableExt.oSort
对象添加了六个函数。来自Google搜索的是this plugin。扩展插件后,您可以执行以下操作:
$('selector').dataTableExt.oSort.date-uk-pre();