我试图修改.offset()
,以便它永远不会返回undefined
,即不可见/隐藏元素。如何在扩展jQuery方法时传递参数?
我遇到的问题是,我不知道如何正确地将this
传递给原始方法。断点调试表明,当它应该是所讨论的元素时,我总是得到Window
。下面是我的了:
(function($){
var original = $.fn.offset;
$.fn.offset = function(elem, coordinates, pass) {
console.log('step 1'); // successful.
console.log(this); // element confirmation.
var o = original(elem, coordinates, pass); // triggers an exception.
console.log('step 2'); // is never reached.
if (o === undefined) {
console.log('step 3a');
return {};
}
else {
console.log('step 3b');
return o;
}
}
}(jQuery));
[…]
$('#element').offset(); // method call.
而这里的例外:
Error in event handler for (unknown): TypeError: undefined is not a function
at jQuery.fn.extend.offset (chrome-extension://…/js/jquery-1.11.0.js:10109:10)
at $.fn.offset (chrome-extension://…/js/jquery-modifications.js:35:11)
我已经尝试了不同的变化 - original(arguments)
,this.original()
,original(this, …)
- 但没有奏效。在this question之后,在另外三个参数旁边使用了名为elem
的参数 - 但我不确定原因。是否因为API提到attributeName
,value
和一个回调函数?如果是这样,那么我的尝试应该工作,类似于.offset()
API。看看如何jQuery定义这些功能并没有帮助,因为.fn.attr
甚至不显示像.fn.offset
那样。
这是正确的,但你应该解释为什么** **和** *如何* 有用。 – 2015-04-04 12:20:31
“这只是一个更好的(IMO)更短的版本[”]“我知道,我只是分裂了控制台日志的界限。 – WoodrowShigeru 2015-04-15 16:37:13