重新定义jQuery函数

我需要重新定义jQuery val()函数,但我不想搞乱源代码。 是否可以仅在一个元素上修改它?

具体来说,我需要做这样的事情: $("div.smth").val = function() {return this.innerText;}; 。 但是,此代码不会修改val函数。 我究竟做错了什么?

你应该修改原型的function(jQuery调用这个fn )。 这是所有函数,如$(...).somethinginheritance自的$(...).something

 $.fn.val = function() { ... }; 

如果要保存原始function:

 var old = $.fn.val; // `old` won't be overwritten $.fn.val = function() { ... }; 

这将做你想要的,你需要将你的新val方法附加到jQuery的插件堆栈:

 $.fn.val = function(value) { return this[0].innerText; } 

其他答案表明如何替换.val()方法,但如果你知道你只需要一个特定的元素就不能这样做:

 $("div.smth")[0].innerText 

但在任何情况下,现有的jQuery .text()方法都没有那么多?

 jsval: function(fn) { var that = this; var newfn = function(event) { fn.apply(that, arguments); }; this.click(newfn); return newfn; } 

相反,现在你可以调用你的普通val并在那个特定的div上调用jsval