我試圖修改.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