$current = $('.current')
コードの先頭で、次の方法で jQuery オブジェクトを含む変数を宣言しています。問題は、ノードのクラスcurrent
が頻繁に変更されることです。
ここに例があります
スクリプトの先頭でセレクターを宣言し、それをより動的にする方法はありますか。
$current = $('.current')
コードの先頭で、次の方法で jQuery オブジェクトを含む変数を宣言しています。問題は、ノードのクラスcurrent
が頻繁に変更されることです。
ここに例があります
スクリプトの先頭でセレクターを宣言し、それをより動的にする方法はありますか。
いいえ、セレクターに一致する項目を DOM から追加/削除するときに、常に最新の jQuery 変数を宣言する方法はありません。これは jQuery が持つ機能ではありません。
ただし、動的に作成された要素の問題を解決する方法は他にもたくさんあります。たとえばdocument.getElementsByClassName()
、ドキュメントの変更に合わせて最新の状態に保たれるライブ nodeList を返します。もちろん、いつでも jQuery 変数を更新してから、ドキュメント内の内容の新しいクエリを使用することができます。これは、クエリの更新がユーザーの時間に対して十分高速であり、アクションが発生した時点で正確であることが保証され、ダングリング参照によるメモリ リークのリスクがないため、ユーザーによってトリガーされるすべてのアクションに対する通常の推奨事項です。
一般に、jQuery 変数内のオブジェクトへの参照を保持すると、ガベージ コレクターが古いオブジェクトからメモリをクリーンアップするのを防ぐことができるため、jQuery 変数内のオブジェクトが動的に作成/削除される場合、しばらくの間 jQuery 変数を保持することはお勧めできません ( jQuery 変数自体が削除されるまで。
そのような変数を宣言すると、解放するか変更するまで、jQuery オブジェクトがメモリに保持されます。したがって、それを呼び出すと、最初にロードしたときの値が常に取得されます。
更新された jQuery オブジェクトが本当に必要な場合は、必要なときに $('.current') を呼び出すだけで、jQuery オブジェクトが再計算され、現在の要素セットを使用できます。
ただし、想像できない何らかの理由で本当にこのようにする必要がある場合、これでうまくいくでしょうか。
$current = function(){
return $('.current');
};
次に、$current() を呼び出すと、更新された jQuery オブジェクトを取得できます。
繰り返しますが、jquery オブジェクトを使用する前に特定の方法で処理する必要がない限り、この方法を行うのはばかげていると思います。それ以外の場合は、前に述べたように jQuery オブジェクト $('.current') を直接呼び出すのが最善の方法です。 ...はるかに簡単です。
修正: これは、 constanltyを呼び出すための非常に長い jQuery オブジェクトがある場合に役立つと思います。$('.class').has('.otherClass').find('.thirdClass').children('img.fourthClassIfYouCanBelieveIt:first');
その場合は、むしろ $current() を呼び出します
それがフロント エンド用に取得することに本当に関心がある機能である場合は、 Knockout、Backbone、Spine、Emberなどの MVVM または MVC タイプのフレームワークの使用を検討できます。これらは一般に宣言型データ バインディングの概念を持っているため、任意の変数をユーザー入力に関連付けることができ、その逆に、表示されたマークアップを任意の変数に関連付けることができます。自分自身を更新する必要はありません。
これは、いくつかのフレームワークを比較した優れた記事です。
私自身、ノックアウトのファンです。
つまり、変数$current
が独自に更新されるようにしますが、そうは思いません。あなたの最善の策は、変数を再度設定した後に変数をリセットすることです:
.... //your code:
$(this).addClass('current');
$current = $('.current');