我正在開發一個小型的JavaScript框架供我們公司內部使用。在某些情況下,我們的框架覆蓋了基本的jQuery功能,以便處理內部邏輯或修復瀏覽器錯誤等。我希望這些情況對於我們的開發人員來說是完全透明的,以便他們可以繼續按照習慣使用jQuery。覆蓋jQuery以在元素變得可見之後執行代碼 - 如何?
我遇到了一個問題,我似乎無法讓我的頭以一種很好的透明方式做 - 至少我不能想出一個好方法來做到這一點 - 所以我轉向你:)。
我想要做的就是以某種方式覆蓋jQuery,以便每次「變得可見」時執行某段代碼。例如,如果開發人員運行show()方法,我希望在元素變得可見之後執行我的代碼。事實上,不管開發人員如何「使元素可見」(例如show(),css(),animate()等)我想我的代碼運行我知道show()例如有一個「回調「參數,可以用於這一點。但重點是;這對開發者應該是完全透明的。他不需要知道這段代碼「在底下運行」。
我所有的覆蓋都是使用閉包完成的,所以我可以保存對原始方法的引用,執行我的操作並執行原始代碼。下面是我如何與表演方法做這樣一個例子:
(function ($) {
var originalShowMethod = jQuery.fn.show;
jQuery.fn.show = function (speed, easing, callback) {
// Do stuff before
var theReturn = jQuery(originalShowMethod.call(this, speed, easing, callback));
// Do stuff after
return theReturn;
};
})(jQuery);
我最初的做法是隻是單純地做這種方式(在運行我的代碼「//做的東西后」)。除非你傳遞一個速度參數(因爲它在內部使用諸如setTimeout或setInterval之類的東西),或者使用其他「顯示元素」方法之一,這也很好。
jQuery中有一些主要的「顯示元素」方法,我可以覆蓋,所以與「顯示元素」有關的所有方法都會受到我的代碼段的影響嗎?還是我必須覆蓋所有「顯示方法」?任何人都可以舉個例子說明我可以如何幫助這項任務?以及如果要這樣做,我需要重寫。
在此先感謝。
你已經看過'show'的源代碼了嗎? – 2011-05-03 21:18:27
是的。我已經下載了jQuery的開發者版本。但是,在這裏發生的一些事情超出了我的誠實。所以我想我希望有人對jQuery核心代碼有更深入的瞭解,可以給我一些關於如何解決這個問題的指導。 – treksterDK 2011-05-04 05:30:58
你有沒有解決過這個問題? – Matteo 2013-02-06 15:34:43