对应于getURLVars()以简化变量

时间:2011-02-01 18:33:31

标签: javascript geturl

我正在使用this function抓取我的网址并从中构建变量:

  

读取页面的GET URL变量和   将它们作为“关联数组”返回。   在at时调用该函数   example.html?foo = asdf& bar = jkls sets   map ['foo'] ='asdf'和   地图[ '酒吧'] = 'jkls'

如何添加for循环以便

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

第一种解决方案不起作用。

2 个答案:

答案 0 :(得分:2)

你可以像这样循环遍历地图

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

这将创建window [foo]和window [bar],它们与window.foo和window.bar相同,与foo和bar相同。

编辑:以下是我正在使用的测试页面中正文的内容。 jQuery应该只在头部加载,因为我用它来初始化我的测试并附加一个单击处理程序,但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>

答案 1 :(得分:1)

为什么要用所有这些变量来破坏全局命名空间?使用map.foomap.bar有什么问题? - 您确实知道map['foo']map.foo完全一样吗?

此外,你想要的是非常不安全的。如果有人用URL查询参数?%24=test打开你的页面,你就会被搞砸了:因为你已经覆盖了$全局变量,jQuery将不再起作用。

另外,请记住,URL参数通常不区分大小写,但Javascript是。因此,?KEY=value通常与?key=value相同。 map.keymap.KEY会被视为不同的变量。