web-dev-qa-db-ja.com

グローバル値(必ずしもグローバル変数である必要はありません)をjQueryに格納する方法は?

現在、私は大量のJavaScript、jQuery、MicrosoftクライアントJavaScript、およびその他のライブラリを使用するレガシーWebページに取り組んでいます。要点-ビジネスが正当化できないため、ページ全体を一から書き直すことはできません。だから...それはそれが何であるかです。とにかく、私は変数を使ってグローバル名前空間を汚染する必要があります(私も試してみました)。私が考えていた3つのオプションがあります-

  1. 通常のJavaScript宣言-_var x = 0;_を使用して保存/取得するだけです

  2. JQueryを使用してDOMタグの値を保存/取得します-$("body").data("x", 0);

  3. 非表示のフォームフィールドを使用し、jQueryで値を設定/取得します-$("whatever").data("x", 0);

もっと良い方法はありますか?既存のコードの山を見ましたが、変数を関数内でスコープできるとは思いません。

80
Kris Krause

次のように、jQueryオブジェクト内に名前空間を作成できます。

$.mynamespace = { 
    myVar : "something", 
    myVar2 : "somethingElse" 
}; 

または:

$.mynamespace = {};
$.mynamespace.myVar = "something";
$.mynamespace.myVar2 = "somethingElse";

「mynamespace」という名前のプラグインメソッドはすべて上書きされるため、適切な名前を使用してください。

100
karim79

私にとってこの状況に対処する最良の方法は、ウィンドウオブジェクトでオブジェクトを定義することです。

window.my_config =
{
    my_var1 : 1,
    my_var1 : 2,
    my_var1 : 3
};

これにより、スコープがきれいに保たれます。そして、window.my_configを使用してグローバルにアクセスするときはいつでも、コードを見ている人はだれでも、グローバルにアクセスしていることがわかります。

38
ovais.tariq

グローバルスコープでハッシュを作成し、それを名前空間として使用できます。

MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
6

練習を共有するだけで、必要なJavaScriptファイルに適切なプレフィックスを持つグローバルオブジェクト/変数を作成します。このオブジェクトがテキストボックスになるページで作業している場合のように、名前を付けます。

g_TxtMyValue = 'value';    // g_ specifies it to be a global variable, it is one
                           // of the many conventions used

複数のグローバル変数がある場合は、次のような名前空間を持つこともできます。

my_txt = {};  // For a real site I would use a prefix relative to the project
              // name instead of "my".

my_txt.testValueOne = 'Value one';
my_txt.testValueOne = 'Value two';

これらの変数は、初期化された後、Webサイト全体で利用可能になります。

これがお役に立てば幸いです。

2
Umair Jabbar

アンダースコア isEmpty() を使用します。

_.isEmpty('')trueを返します。

0
Eldad

ちょっとしたお知らせ:

FancyboxはAJAX(つまり、iFrame内でロードする場合、closeメソッドに「親」を追加する必要があります)を実行していますか?

parent.$.fancybox.close();
0
Moriz