如何在一个步骤中向jQuery添加可链接的函数?

时间:2012-06-25 22:22:51

标签: jquery jquery-plugins prototype

我添加了以下功能,因此我可以向后迭代某些集合:

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);
    }
});

但是当我以这种方式运行链式方法时,我收到以下错误: 无法获取属性“call”的值:object为null或undefined。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您无需访问刚刚在$.fn上定义的原型:

(function($){
  $.fn.reverseEach = function(callback) {
     return $(this.get().reverse()).each(callback);
  };
})(jQuery);