问题
我想知道在保留所有功能的同时包装 jQuery 函数的最佳方式。本质上,我想调用$('#someId')
它,但它$('#' + id + 'someId')
通过包装函数、修改参数并将其传递给原始 jQuery 函数来运行。
动机
我有一段 JS 将重用winId
连接并传递给 jQuery 的相同变量。而不是写
$('#' + winId + 'someId').html();
$('#' + winId + 'someOtherId').css();
...
$('#' + winId + 'someThirdId').text();
在整个文件中,我想包装 jQuery 函数,这样我就可以调用
$('#someId').html();
$('#someOtherId').css();
...
$('#someThirdId').text();
并且winId
在通过 to 之前添加了$
。
我的尝试
这是我作为包装器的想法:
(function() {
var fn = $;
return $ = function() {
for ( var i = 0; i < arguments.length; i++ ) {
if ( typeof arguments[i] == 'string') {
arguments[i] = /* code to add in winId, omitted */
}
}
return fn.apply( this, arguments );
}
})();
这很好用,除了显然没有类似的方法$.ajax
可用:
Uncaught TypeError: Object function () {
for ( var i = 0; i < arguments.length; i++ ) {
if ( typeof arguments[i] == 'string' ) {
arguments[i] = /* code to add in winId, omitted */
}
}
return fn.apply( this, arguments );
} has no method 'ajax'
注意:我知道我可以通过 using 复制对象jQuery.extend($, jQuery)
,但如果可能的话,我对比这更优雅的解决方案感兴趣。