2

我有以下代码:

     $.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
4

3 回答 3

5

DataTables在基本包中提供了几个排序选项。您正在查看的称为基于类型的列排序,它基本上会尝试根据列的类型对其进行排序。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 ) {
  // ...
}

也就是说,您正在使用一个名为 的新属性来扩展。jQuery只不过是一个捷径而已。对于每个新类型,您无需手动添加每个属性,而是传递一个新对象,其中包含所有新类型(例如 ,和jQuery将它们与现有对象合并,有效地使用新功能扩展它。您甚至可以将两者结合起来s 到一个:oSortdate-uk-pre$.extend()date-uk-predatetime-uk-preoSort$.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));
    }
});
于 2012-09-10T14:04:31.640 回答
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'};

此外,对于一个论点:

$.extend(m1)

相当于

$.extend($, m1);

或者

jQuery.extend(jQuery, m1);

所以 jQuery 会被扩展。然后 jQuery 将在我上面的特定示例中包含两个附加属性: 'a':'a' 和 'b','b' 。所以 $.a 会返回'a'。

有关详细信息,请参阅http://api.jquery.com/jQuery.extend/

于 2012-09-10T13:57:20.943 回答
1

扩展函数将第二个参数中定义的属性添加到第一个参数中的对象。通常它用于向插件添加更多功能,就像上面的代码一样。上面的代码向$.fn.dataTableExt.oSort对象添加了六个函数。这个插件来自谷歌搜索。扩展插件后,您可以执行以下操作:

$('selector').dataTableExt.oSort.date-uk-pre();
于 2012-09-10T13:57:29.277 回答