我正在开发一个小型 javascript 框架供我们公司内部使用。在某些情况下,我们的框架会覆盖基本的 jQuery 功能,以处理内部逻辑或修复浏览器错误等。我希望这些情况对我们的开发人员来说是完全透明的,这样他们就可以继续按照他们习惯的方式使用 jQuery。
我遇到了一个问题,我似乎无法以一种很好的透明方式解决问题——至少我想不出一个好的方法来解决它——所以我求助于你:)。
我想要做的是以某种方式覆盖 jQuery,这样我就可以在每次“变得可见”时执行一段特定的代码。例如,如果开发人员运行 show() 方法,我想在元素变得可见后执行我的代码。事实上,无论开发人员如何“使元素可见”(例如 show()、css()、animate() 等),我都希望我的代码能够运行
我知道例如 show() 有一个“回调”参数可以用于此目的。但重点是;这对开发人员来说应该是完全透明的。他不需要知道这段代码“在下面运行”。
我所有的覆盖都是使用闭包完成的,所以我可以保存对原始方法的引用,做我的事情并执行原始方法。这是我如何使用 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);
我最初的方法是简单地这样做(在“// Do stuff after”处运行我的代码)。除非您传递速度参数(因为它在内部使用 setTimeout 或 setInterval 之类的东西)或使用其他“显示元素”方法之一,否则这也很有效。
jQuery中是否有一些我可以覆盖的主要“显示元素”方法,所以所有与“显示元素”有关的方法都会受到我的代码的影响?还是我必须覆盖所有“显示方法”?谁能举例说明我如何参与这项任务?如果这是这样做的方法,我需要覆盖什么。
提前致谢。