私はjquery documentation of plugin authoringを読んでおり、それに精通しています。しかし、与えられた例は、常に以前に一致した要素のセットで動作します。 - 初期化プロセスの種類(必ずしも必要ではないがjQueryプラグイン関数をスタンドアロンで呼び出し可能にする方法は、コレクションでは動作しません。
// example usage of my to-be-created plugin function
// this is the way described in the docs, and I know how to do that
$("a").myFunction()
// but I also want to be able to call the function without a collection:
$.myFunction();
$.myFunction()
場合は、それが一致する内容要素の自身のコレクションだ作成し、操作対象のコレクションなしで呼び出された:私は両方を行うことができます関数を作成したいです一度だけ実行してください)。また、$.myFunction()
は連鎖性を維持する必要があります。
私が達成したいものの擬似コード:
// [...]
function myFunction(): {
if (notCalledOnACollection) {
// this should run when called via $.myFunction()
$elements = $("a.myClass");
}
else {
$elements = $(this);
}
return $elements.each (function() {
// do sth. here
});
}
私は本当に、単一の関数定義内の関数の実装/機能のすべてを維持したい、と均等という名前の2つの個別の名前の関数や2を持っていませんjQueryオブジェクト内の2つの別々の場所で機能します。
そしてもちろん(私は複数のプラグインのためにそのアプローチを使用したい、とmyFunction()
とargumentesがあるだろう、私は実行するためにif
文のどの枝を示すパラメータmyFunction (do_init)
を追加することができますが、それは私の引数リストを煩雑にします私は単純さのためにここに出てきました)。
良い提案はありますか?
私はあなたのソリューションとの深刻な問題を抱えています。私はあなたのアプローチをjsfiddleに複製しました:http://jsfiddle.net/pnpbU/ しかし、一旦 '$ .myPlugin()'を実行すると、テストされたすべてのブラウザは100%CPUを消費し、スタックします(LinuxおよびWindowsではFFでテストされます) 、Safari for Mac)をクリックします。 – Dyna
私のマシンでその問題が表示されません。そして、私は現時点で恐竜の上にいる。さらに、jsfiddleはパフォーマンステストに使用すべきではありません。たくさんのエキストラがロードされています。私もローカルでテストし、そこに問題は見られませんでした。私はあなたの見解がこのコードと何が関係しているのか本当に疑問です。 – Donamite
jsfiddleのjs部分の行のコメントを外しましたか?それ以外の場合は実行されません!私は現在大学にいて、たくさんのコンピュータにアクセスでき、物理的に異なる3つのマシンで100%のCPU消費を再現できます。 http://jsfiddle.net/pnpbU(最後の行のコメントを外して)を実行してrunを押すと、Fedora 17のスクリプトがブロック/終了します:Firefox 14.0.1、Chrome 22; Windows 7:Firefox 14、IE9; OS X Lion:Safari 5、Firefox 14だから、確かに*再現可能です。これはjsfiddleとは無関係で、そのスクリプトをjQuery 1.8.0と一緒にコピーして実行すると同じ効果が得られます。 – Dyna