我正在开发一个供我们公司内部使用的小型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)或使用其他“show an element”方法之外,这也很有效。
在jQuery中是否有一些主要的“显示元素”方法我可以覆盖所以与“显示元素”有关的所有方法都会受到我的代码片段的影响?或者我是否必须覆盖所有“显示方法”?任何人都可以举例说明我如何能够帮助完成这项任务吗?如果是这样的话,我需要覆盖什么。
提前致谢。
答案 0 :(得分:0)
我认为你想要类似.is()和:visible选择器,听起来你可能想要使用setInterval运行这样的函数
function checkElementVis(){
if($(".element").is(":visible")){
alert("is visible");
} else {
alert("not visible");
}
}