2012-06-25 31 views
0

我增加了以下功能,所以我可以在一些收藏向後遍歷:如何在單個步驟中向jQuery添加可鏈接的函數?

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

不過,我想成爲所有光滑和使它可以鏈接,因爲我喜歡我的語法糖。我添加到原來的reverseEach函數的引用在jQuery的原型:

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

現在我可以這樣調用:

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

不過,我認爲1.3中的功能做的同一件事情在一個步驟中,而不需要參考原型。我試圖用1.3中的功能,如:

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

但whenver我運行鏈接方法這種方式,我得到以下錯誤: 無法獲得屬性「叫」的價值:對象爲空或未定義。

我在做什麼錯誤的jQuery.fn.extend方法?我是否採取了完全錯誤的做法,還是我錯過了簡單的事情?

謝謝!

+3

[請務必閱讀本(http://docs.jquery.com/Plugins/Authoring) – gdoron

+0

正是我聯繫尋找。仍然是jQuery的新功能。 –

回答

2

你不需要訪問你僅僅指剛上$.fn定義樣機:

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