2

我有下面的函数,它将查询放入一个对象中。它可以工作,但会将 url 添加到对象中,而且我对正则表达式的了解不够,无法弄清楚如何删除 url 并且只包含 vars。

function urlToObj(url)
{
        var obj = {};
        url.replace(
            new RegExp("([^?=&]+)(=([^&]*))?", "g"),
            function($0, $1, $2, $3) { obj[$1] = $3; }
        );

        return obj;
}

例如

url = http://www.example.com/hello/world.php?var1=1&var2=2
url = http://www.example.com/hello/world.asp?var1=1&var2=2
url = http://www.example.com/hello/world?var1=1&var2=2

obj = urlToObj(url);

输出

obj { var1="1", var2="2", http://www.example.com/hello/world.php="" }
obj { var1="1", var2="2", http://www.example.com/hello/world.asp="" }
obj { var1="1", var2="2", http://www.example.com/hello/world="" }

我希望它删除网址,所以它看起来像这样

obj { var1="1", var2="2" }

任何我出错的例子和信息都会很棒。

谢谢

4

2 回答 2

0

这个扩展创建了一个单例查询字符串对象,用于快速和可读的查询字符串修改和创建。这个插件提供了一种简单的方法来获取页面的查询字符串并用很少的代码创建它的修改版本。

http://archive.plugins.jquery.com/project/query-object

于 2012-04-22T16:40:54.233 回答
0

一些黑客呢?:-)

function urlToObj ( url ) {
    var obj = {};
    url.replace(
        new RegExp("([^?=&]+)(=([^&]*))?", "g"),
        function($0, $1, $2, $3) { obj[$1] = $3; }
    );

    // Now, you know you've got an empty string for your url
    // So let's loop through the object and remove this property
    for ( var prop in obj ) {

        // You only want the objects properties, nothing inherited
        if ( obj.hasOwnProperty( prop ) ) {

            // If it's an empty string
            if ( obj[ prop ] === '' ) {

                // Delete it!
                delete obj[ prop ]
            }
        }
    }
    return obj;
}
于 2012-04-22T17:16:19.347 回答