0

この関数を使用して、URL をスクレイピングし、そこから変数を作成しています。

ページの GET URL 変数を読み取り、それらを「連想配列」として返します。example.html?foo=asdf&bar=jkls で関数を呼び出すと、 map['foo']='asdf' および map['bar']='jkls' が設定されます

for ループを追加する方法

foo = map['foo']
bar = map['bar']

?

最初の解決策は機能しませんでした。

4

2 に答える 2

2

このようにマップをループできます

for (var key in map)
{
    window[key] = map[key];
}

これにより、window.foo および window.bar と同じである window[foo] および window[bar] が作成されます。これらは、foo および bar と同じです。

EDIT:私が使用しているテストページの本文の内容は次のとおりです。テストを初期化し、クリック ハンドラーをアタッチするために jQuery を使用するため、jQuery を head にロードする必要がありますが、for ループの概念は jQuery に依存しません。地図が手元にないので、ドキュメントが読み込まれるときに自分で地図を作成しています。その時点から、説明したとおりにマップをループし、クリック ハンドラーをボタンにアタッチして、適切な割り当てをテストします。

    <input type="button" />

    <script type="text/javascript" language="javascript">
        $(document).ready(function(){
            /* You don't need to build the map, you should already have it
            var map = new Object();
            map.foo='bar';
            map.test='meh';
            */

            // This is the loop from my original post
            for (var key in map)
            {
                window[key] = map[key];
            }

            // This is just a debug handler, you wouldn't need it
            $('input[type="button"]').click(function(){
                // This is very annoying, but proves that all three methods of access are valid for both variables
                alert(window['foo']);
                alert(window.foo);
                alert(foo);
                alert(window['test']);
                alert(window.test);
                alert(test);
                return false;
            });
        });
    </script>

于 2011-02-01T18:44:14.533 に答える
1

なぜこれらすべての変数でグローバル名前空間を壊したいのですか?map.fooとの使用の何が問題になっていmap.barますか?—あなたはそれを知っていてmap['foo']map.fooまったく同じですか?

その上、あなたが望むものは非常に安全ではありません。誰かがURLクエリパラメータを使用してページを開いた場合、あなたは失敗するでしょう。グローバル変数?%24=testを上書きしてしまうため、jQueryは機能しなくなります。$

また、URLパラメータは通常大文字と小文字を区別しませんが、Javascriptは大文字と小文字を区別することに注意してください。したがって、通常?KEY=valueはと同じになり?key=valueます。 map.keyただし、とmap.KEYは異なる変数として扱われます。

于 2011-02-02T17:30:17.720 に答える