重新定义jQuery函数

时间:2011-11-25 10:42:11

标签: javascript jquery dynamic

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

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

4 个答案:

答案 0 :(得分:3)

您应该修改原型的功能(jQuery调用此fn)。这就是$(...).something等所有函数都继承自。

的地方
$.fn.val = function() { ... };

如果要保存原始功能:

var old = $.fn.val; // `old` won't be overwritten

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

现在您可以调用正常的val并在该特定div上调用jsval