0

我添加了以下函数,以便可以向后迭代一些集合:

jQuery.reverseEach = function (object, callback, args) {
    var reversed = $(object).get().reverse();
    return $(reversed).each(callback, args);
};

如果您这样称呼它,效果会很好:

$.reverseEach($('#selectedSortItems option:selected'), function() {
    $(this).insertAfter($(this).next());
});

但是,我想变得光滑并使其可链接,因为我喜欢我的语法糖。我在 jQuery 的原型上添加了对原始 reverseEach 函数的引用:

jQuery.prototype.reverseEach = function(callback, args) {
    return jQuery.reverseEach(this, callback, args);
};

现在我可以这样称呼它:

$('#selectedSortItems option:selected').reverseEach(function () {
    $(this).insertAfter($(this).next());
});

但是,我认为 jQuery.fn.extend 函数只需一步即可完成相同的操作,而无需引用原型。我尝试使用 jQuery.fn.extend 函数,如下所示:

jQuery.fn.extend({
    reverseEach: function(object, callback, args) {
        var reversed = $(object).get().reverse();
        return $(reversed).each(callback, args);
    }
});

但是,每当我以这种方式运行链接方法时,都会出现以下错误:无法获取属性“调用”的值:对象为空或未定义。

jQuery.fn.extend 方法我做错了什么?我采取了完全错误的方法,还是我只是错过了一些简单的东西?

谢谢!

4

1 回答 1

2

您不需要访问您定义的原型$.fn

(function($){
  $.fn.reverseEach = function(callback) {
     return $(this.get().reverse()).each(callback);
  };
})(jQuery);
于 2012-06-25T22:28:34.960 回答