Gor*_*vic 11 jquery overriding element function core
是否有可能在元素级别覆盖核心jQuery函数,因此举个例子,我想仅在一个<select>元素上覆盖val()函数.
如果我做这样的事情
var element = $('select');
var old_val = element.val;
element.val = function () {
console.log('The new val');
return old_val.apply(this, arguments);
}
element.val(19);
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但只要我用新的jQuery实例处理相同的字段
var element = $('select');
element.val(19);
Run Code Online (Sandbox Code Playgroud)
它停止工作,因为我们有jQuery对象的新实例.如果我使用$ .fn.val函数,我会改变所有支持val函数的对象的行为,这对我来说有点太多了.
任何帮助将不胜感激.谢谢.
我做了这个 jquery 扩展来完成你正在谈论的事情:
// overrides a method thats supposed to be called on a single node (a method like val)
$.fn.overrideNodeMethod = function(methodName, action) {
var originalVal = $.fn[methodName];
var thisNode = this;
$.fn[methodName] = function() {
if (this[0]==thisNode[0]) {
return action.apply(this, arguments);
} else {
return originalVal.apply(this, arguments);
}
};
};
Run Code Online (Sandbox Code Playgroud)
对 Dave 答案的奖励 - 您不必污染 jquery 数据名称空间或担心有人覆盖该密钥