質問
すべての機能を保持しながら jQuery 関数をラップできる最善の方法を知りたいです。本質的には呼び出したいのですが、関数をラップし、引数を変更して、元の jQuery 関数に渡すよう $('#someId')
に動作させます。$('#' + id + 'someId')
動機
winId
連結されてjQueryに渡される同じ変数を再利用するJSのセクションがあります。書く代わりに
$('#' + winId + 'someId').html();
$('#' + winId + 'someOtherId').css();
...
$('#' + winId + 'someThirdId').text();
ファイル全体を通して、jQuery関数をラップして、呼び出すだけです
$('#someId').html();
$('#someOtherId').css();
...
$('#someThirdId').text();
と をwinId
通過する前に と を追加しました$
。
私の試み
これが私がラッパーとして考えていることです:
(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'
注: を使用してオブジェクトをコピーできることはわかっていますがjQuery.extend($, jQuery)
、可能であればそれよりも洗練されたソリューションに興味があります。