我编写了一个插件,它构造了一个丰富的UI控件。我希望有一种方法可以让我在查询这个元素时改变jquery的操作方式。
我希望jquery忽略这个控件的内部结构,但这并不是一个很难的要求。我想做的是改变
$('#RichUIControlID').val()
因为
#RichUIControlID
是此控件的包装元素(可能我使用CSS类来标识该元素)。
目前我必须调用插件函数
$('#RichUIControlID').richUIControlID().val()
这将返回带有必要更改的jquery对象。
val()
在这种情况下,我希望它做什么。
但是,如果我可以在不使用附加函数调用的情况下维护jquery接口,那么它将允许我继续使用熟悉的模式,在我的例子中,这种模式具有巨大的重用价值。
// I want to change val() depending on some property of the selector #RichUIControlID
$('#RichUIControlID').val()
可以这样做吗?
编辑1:
这样做的一种方式,因为MAMOO提供的链接,将是这样做然后:
(function() {
var val = jQuery.fn.val;
jQuery.fn.val = function() {
if (this.is('#RichUIControlID'))
return this.richUIControlID().val()
else
return val.apply(this, arguments);
}
})();
然而,这感觉有点太过侵入。每次召唤
Val.()
不需要检查它是否是richuiControlID元素,如果可能的话,我宁愿在施工期间将其连接起来。
编辑2:
这就是问题所在,浏览源代码实际上可以以相同的方式控制jquery构造函数。这里要注意的是,如果您首先不将调用转发给默认的构造函数,那么最终会得到一个麻烦的调用堆栈。
(function() {
var init = jQuery.fn.init;
jQuery.fn.init = function() {
var q = init.apply(this, arguments); // call this first
if (q.data('RichUIControlID'))
return q.richUIControlID();
else
return q;
}
})();