我需要重新定義jQuery val()函數,但我不想混淆源代碼。是否有可能只修改一個元素?重新定義jQuery函數
具體來說,我需要做這樣的事情:$("div.smth").val = function() {return this.innerText;};
。但是,val函數未被此代碼修改。我究竟做錯了什麼?
我需要重新定義jQuery val()函數,但我不想混淆源代碼。是否有可能只修改一個元素?重新定義jQuery函數
具體來說,我需要做這樣的事情:$("div.smth").val = function() {return this.innerText;};
。但是,val函數未被此代碼修改。我究竟做錯了什麼?
您應該修改原型的功能(jQuery調用fn
)。這是從$(...).something
繼承的所有功能。
$.fn.val = function() { ... };
如果你想保存原有的功能:
var old = $.fn.val; // `old` won't be overwritten
$.fn.val = function() { ... };
這會做你想要什麼,你需要你的新val
方法附加到jQuery的插件堆棧:
$.fn.val = function(value) {
return this[0].innerText;
}
很好的答案,但@ pimvdb是第一個。 – ulu
jsval: function(fn) {
var that = this;
var newfn = function(event) { fn.apply(that, arguments); };
this.click(newfn);
return newfn;
}
相反,現在你可以打電話給你的正常val
和特定DIV,調用
關鍵是我想使用一個現有的jQuery插件(自動完成)與contenteditable div。所以我需要重新定義從該插件調用的val。 – ulu
如何調用原函數從新定義中? – ulu
@ulu:這有點複雜,因爲有一個'this'值需要傳遞。你可以使用'old.call(this,...)',這相當於前面的$(this).val(...)'。如果你想傳遞所有參數,你可以使用'old.apply(this,arguments)'。 – pimvdb
這是如何滿足從「只修改一個元素」這個問題的要求? – nnnnnn