我试图进行修改.offset()
,使其永远不会返回undefined
,即不可见/隐藏的元素。
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)
-但没有奏效。在这个问题中,在另外三个参数旁边使用了一个称为–的参数-但我不确定为什么。是不是因为API提到,和一个回调函数?如果是这样,那么我的尝试应该可以工作,类似于API。查看jQuery如何定义这些功能也没有帮助,因为它甚至没有显示出来。this.original()
original(this, …)
elem
attributeName
value
.offset()
.fn.attr
.fn.offset
如你所说:
老实说,我遇到的问题是我不知道如何正确地将其传递给原始方法。
为了更改函数范围(此),有两种函数原型方法,称为call()
和apply()
对这两种方法的文档的引用:
因此,您的代码现在应如下所示:
var original = $.fn.offset;
$.fn.offset = function() {
var o = original.apply(this, arguments);
return typeof o === 'undefined' ? {} : o;
};
和
return typeof o === 'undefined' ? {} : o;
这只是(IMO)的更好的简短版本:
if (typeof o === 'undefined') {
return {};
} else {
return o;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句