1

外部ファイル (settings.js) にいくつかの変数を保存しています。

var company = "Apple";
var city = "Toronto";
var weather = "Sunny";

私の HTML では、すべての変数が格納される jQuery と settings.js を参照しています。タグ間のコードは次のbodyようになります。

<div class="company"></div>
<div class="city"></div>
<div class="weather"></div>

settings.js ファイルを読み取り、変数を見つけてロードし、変数と同じクラス名を持つ HTML 要素を見つけ、最後にその要素の内容を変数値で更新するスマートな jQuery コードを作成しようとしています。

関数を実行すると、HTML は次のようになります。

<div class="company">Apple</div>
<div class="city">Toronto</div>
<div class="weather">Sunny</div>

注:同じクラス名を持つ HTML 内に複数の場所が存在する場合があります。これらはすべて、FF でローカルに実行されます。これはテスト/デモ プロジェクトなので、パフォーマンスについてはあまり心配していません。

JSFiddle:

4

3 に答える 3

5

オブジェクトを使用して変数を含めると、文字列を使用してプロパティを参照できます。

 // Variables 
    var data = {
        company:"Apple",
        city:"Toronto",
        weather:"Sunny"

    }

    ​$("div").each(
        function(){
        this_class = $(this).attr("class");
        $(this).text(data[this_class]);
        }
    );​​​​​​
于 2012-12-12T19:27:29.407 に答える
4

特定のスコープ内の変数のリストを取得する方法がないため、これは不可能です ( Getting All Variables In Scopeを参照)。

を省略した場合var(必ずしも推奨されるわけではありません)、それらはそれぞれwindowオブジェクトにアタッチされ、次のようにすることができます。

$("div").each(function () {
   $(this).text(window[$(this).attr('class')]);
});

別の方法として、それぞれを独自の変数として持つ代わりに、オブジェクトでこれらの値を定義することもできます。

于 2012-12-12T19:26:47.083 に答える
0

これを実行するには、何らかのスコープが必要です。var xそれらをウィンドウに配置するように定義するだけです。したがって、ウィンドウ上のすべての変数を反復処理して、それらを見つけることができます。

for(var k in window) {
    // do stuff
}

しかし、ご想像のとおり、ウィンドウ変数はたくさんあります(現在、このページのChromeブラウザでは45個です。

Matanyaは、スコーピングが適切に行われた後の方法に私を打ち負かしました。しかし、上記はその理由のいくつかです。

編集:私は実際には逆の方法でそれを行います。divで選択するのではなく、クラス名で選択します。興味のあるクラスを選択すると、はるかに小さな結果セットが得られます(通常のページの場合、とにかく、divは通常キャンディーのように散らばっています)。

for(var k in data)
{
    $("."+k).html(data[k]);
}
于 2012-12-12T19:28:20.027 に答える